horner演算法
⑴ 中國數學發展史-宋元數學總結
宋元數學總結
唐朝亡後,五代十國仍是軍閥混戰的繼續,直到北宋王朝統一了中國,農業、手工業、商業迅速繁榮,科學技術突飛猛進。從公元十一世紀到十四世紀(宋、元兩代),籌算數學達到極盛,是中國古代數學空前繁榮,碩果累累的全盛時期。這一時期出現了一批著名的數學家和數學著作,列舉如下:賈憲的《黃帝九章演算法細草》(11世紀中葉),劉益的《議古根源》(12世紀中葉),秦九韶的《數書九章》(1247),李冶的《測圓海鏡》(1248)和《益古演段》(1259),楊輝的《詳解九章演算法》(1261)、《日用演算法》(1262)和《楊輝演算法》(1274-1275,朱世傑的《算學啟蒙》(1299)和《四元玉鑒》(1303)等等。
宋元數學在很多領域都達到了中國古代數學,甚至是當時世界數學的巔峰。其中主要的工作有:(1)高次方程數值解法;(2)天元術與四元術,即高次方程的立法與解法,是中國數學史上首次引入符號,並用符號運算來解決建立高次方程的問題;(3)大衍求一術,即一次同餘式組的解法,現在稱為中國剩餘定理;(4)招差術和垛積術,即高次內插法和高階等差級數求和。
另外,其它成就包括勾股形解法新的發展、解球面直角三角形的研究、縱橫圖(幻方)的研究、小數(十進分數)具體的應用、珠算的出現等等。
這一時期民間數學教育也有一定的發展,以及中國和伊斯蘭國家之間的數學知識的交流也得到了發展。
⑵ 除貪心演算法外 還有哪些演算法
你指的是演算法設計的技巧和方法吧~
這些多了
比如最簡單的歸納法(例如遞歸求整數冪、horner規則的二項式求值等等),萬能的回溯法(本質上即窮舉搜索,能解決大部分的枚舉類問題,如8皇後),高效的動態規劃(「填表格法」,能將許多最優解問題以極快時間內解決,典型例子如背包問題的動態規劃求解),還有很多(分支定界,分治,深度和廣度優先遍歷,隨機演算法,近似演算法等等)不過這些是最基礎的演算法知識了……貪心屬於最先割技術,每次求出當前條件下的最優解,這方面可以參考《演算法導論》及《演算法設計與分析》等相關書籍,相信能有不少收獲。
⑶ 秦九韶演算法
秦九韶演算法是一種將一元n次多項式的求值問題轉化為n個一次式的演算法。其大大簡化了計
秦九韶演算法
算過程,即使在現代,利用計算機解決多項式的求值問題時,秦九韶演算法依然是最優的演算法。
在西方被稱作霍納演算法,是以英國數學家霍納命名的。
編輯本段秦九韶簡介
秦九韶(約公元1202年-1261年),字道古,南宋末年人,出生於魯郡(今山東曲阜一帶人)。早年曾從隱君子學數術,後因其父往四川做官,即隨父遷徙,也認為是普州安岳(今四川安岳縣)人。秦九韶與李冶、楊輝、朱世傑並稱宋元數學四大家。(安岳縣於1998年9月正式開工建設秦九韶紀念館,2000年12月竣工落成。)
秦九韶聰敏勤學,宋紹定四年(公元1231),秦九韶考中進士,先後擔任縣尉、通判、參議官、州守等職。先後在湖北、安徽、江蘇、浙江等地做官。南宋理宗景定元年(公元1260年)出任梅州(今廣東梅縣)守,翌年卒於梅州。據史書記載,他「性及機巧,星象、音律、算術以至營造無不精究」,還嘗從李梅亭學詩詞。他在政務之餘,以數學為主線進行潛心鑽研,且應用范圍至為廣泛:天文歷法、水利水文、建築、測繪、農耕、軍事、商業金融等方面。
秦九韶是我國古代數學家的傑出代表之一,他的《數書九章》概括了宋元時期中國傳統數學的主要成就,尤其是系統總結和發展了高次方程的數值解法與一次同餘問題的解法,提出了相當完備的「正負開方術」和「大衍求一術」。對數學發展產生了廣泛的影響。
秦九韶是一位既重視理論又重視實踐,既善於繼承又勇於創新的科學家,他被國外科學史家稱為是「他那個民族,那個時代,並且確實也是所有時代最偉大的數學家之一。
編輯本段數書九章
宋淳祜四至七年(公元1244至1247),秦九韶在湖州為母親守孝三年期間,把長期積累的數學知識和研究所得加以編輯,寫成了舉世聞名的數學巨著《數書九章》。 書成後,並未出版。原稿幾乎流失,書名也不確切。後歷經宋、元,到明建國,此書無人問津,直到明永樂年間,在解縉主編《永樂大典》時,記書名為《數學九章》。又經過一百多年,經王應麟抄錄後,由王修改為《數書九章》。
全書不但在數量上取勝,重要的是在質量上也是拔尖的。從歷史上來看,秦九韶的《數
秦九韶紀念館
書九章》可與《九章算術》相媲美;從世界范圍來看,秦九韶的《數書九章》也不愧為世界數學名著。
他在《數書九章》序言中說,數學「大則可以通神明,順性命;小則可以經世務,類萬物」。所謂「通神明」,即往來於變化莫測的事物之間,明察其中的奧秘;「順性命」,即順應事物本性及其發展規律。在秦九韶看來,數學不僅是解決實際問題的工具,而且應該達到「通神明,順性命」的崇高境界。
《數書九章》全書共九章九類,十八卷,每類9題共計81個算題。該書著述方式,大多由「問曰」、「答曰」、「術曰」、「草曰」四部分組成:「問曰」,是從實際生活中提出問題;「答曰」,是給出答案;「術曰」,是闡述解題原理與步驟;「草曰」,是給出詳細的解題過程。另外,每類下還有頌詞,詞簡意賅,用來記述本類算題主要內容、與國計民生的關系及其解題思路等。
編輯本段秦九韶演算法
一般地,一元n次多項式的求值需要經過[n(n+1)]/2次乘法和n次加法,而秦九韶演算法只需要n次乘法和n次加法。在人工計算時,一次大大簡化了運算過程。特別是在現代,在使用計算機解決數學問題時,對於計算機程序演算法而言秦九韶演算法可以以更快的速度得到結果,減少了CPU運算時間。
把一個n次多項式f(x)=a[n]x^n+a[n-1]x^(n-1)+......+a[1]x+a[0]改寫成如下形
秦九韶
:
f(x)=a[n]x^n+a[n-1]x^(n-1)+......+a[1]x+a[0]
=(a[n]x^(n-1)+a[n-1]x^(n-2)+......+a[1])x+a[0]
=((a[n]x^(n-2)+a[n-1]x^(n-3)+......+a[2])x+a[1])x+a[0]
=......
=(......((a[n]x+a[n-1])x+a[n-2])x+......+a[1])x+a[0].
求多項式的值時,首先計算最內層括弧內一次多項式的值,即
v[0]=a[n]
v[1]=a[n]x+a[n-1]
然後由內向外逐層計算一次多項式的值,即
v[2]=v[1]x+a[n-2]
v[3]=v[2]x+a[n-3]
......
v[n]=v[n-1]x+a[0]
這樣,求n次多項式f(x)的值就轉化為求n個一次多項式的值。
(註:中括弧里的數表示下標)
結論:對於一個n次多項式,至多做n次乘法和n次加法。
編輯本段意義
該演算法看似簡單,其最大的意義在於將求n次多項式的值轉化為求n個一次多項式的值。在人工計算時,利用秦九韶演算法和其中的系數表可以大幅簡化運算;對於計算機程序演算法而言,加法比乘法的計算效率要高很多,因此該演算法仍有極大的意義,對於計算機來說,做一次乘法運算所用的時間比作一次加法運算要長得多,所以此演算法極大地縮短了CPU運算時間。
(附:計算機程序)
INPUT 「n=」;n
INPUT 「an=」;a
INPUT 「x=」;x
v=a
i=n-1
WHILE i>=0
PRINT 「i=」;i
INPUT 「ai=」;a
v=v*x+a
i=i-1
WEND
PRINT v
END
編輯本段PASCAL演算法實現
v[1]:=a[n]*k+a[n-1];
for i:=2 to n do
v[i]:=v[i-1]*k+a[n-i];
writeln(v[n]);
⑷ matlab中horner函數要怎麼編程
7.1.1 分段線性插值
所謂分段線性插值就是通過插值點用折線段連接起來逼近原曲線,這也是計算機繪制圖形的基本原理。實現分段線性插值不需編制函數程序,MATLAB自身提供了內部函數interp1其主要用法如下:
interp1(x,y,xi) 一維插值
◆ yi=interp1(x,y,xi)
對一組點(x,y) 進行插值,計算插值點xi的函數值。x為節點向量值,y為對應的節點函數值。如果y 為矩陣,則插值對y 的每一列進行,若y 的維數超出x 或 xi 的維數,則返回NaN。
◆ yi=interp1(y,xi)
此格式默認x=1:n ,n為向量y的元素個數值,或等於矩陣y的size(y,1)。
◆ yi=interp1(x,y,xi,』method』)
method用來指定插值的演算法。默認為線性演算法。其值常用的可以是如下的字元串。
● nearest 線性最近項插值。
● linear 線性插值。
● spline 三次樣條插值。
● cubic 三次插值。
所有的插值方法要求x是單調的。x 也可能並非連續等距的。
正弦曲線的插值示例:
>> x=0:0.1:10;
>> y=sin(x);
>> xi=0:0.25:10;
>> yi=interp1(x,y,xi);
>> plot(x,y,』0』,xi,yi)
則可以得到相應的插值曲線(讀者可自己上機實驗)。
Matlab也能夠完成二維插值的運算,相應的函數為interp2,使用方法與interpl基本相同,只是輸入和輸出的參數為矩陣,對應於二維平面上的數據點,詳細的用法見Matlab聯機幫助。
7.1.2 最小二乘法擬合
在科學實驗的統計方法研究中,往往要從一組實驗數據中尋找出自變數x 和因變數y之間的函數關系y=f(x) 。由於觀測數據往往不夠准確,因此並不要求y=f(x)經過所有的點 ,而只要求在給定點上誤差按照某種標准達到最小,通常採用歐氏范數作為誤差量度的標准。這就是所謂的最小二乘法。在MATLAB中實現最小二乘法擬合通常採用polyfit函數進行。
函數polyfit是指用一個多項式函數來對已知數據進行擬合,我們以下列數據為例介紹這個函數的用法:
>> x=0:0.1:1;
>> y=[ -0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2 ]
為了使用polyfit,首先必須指定我們希望以多少階多項式對以上數據進行擬合,如果我們指定一階多項式,結果為線性近似,通常稱為線性回歸。我們選擇二階多項式進行擬合。
>> P= polyfit (x, y, 2)
P=
-9.8108 20.1293 -0.0317
函數返回的是一個多項式系數的行向量,寫成多項式形式為:
為了比較擬合結果,我們繪制兩者的圖形:
>> xi=linspace (0, 1, 100); %繪圖的X-軸數據。
>> Z=polyval (p, xi); %得到多項式在數據點處的值。
當然,我們也可以選擇更高冪次的多項式進行擬合,如10階:
>> p=polyfit (x, y, 10);
>> xi=linspace (0, 1,100);
>> z=ployval (p, xi);
讀者可以上機繪圖進行比較,曲線在數據點附近更加接近數據點的測量值了,但從整體上來說,曲線波動比較大,並不一定適合實際使用的需要,所以在進行高階曲線擬合時,「越高越好」的觀點不一定對的。
7.2 符號工具箱及其應用
在數學應用中,常常需要做極限、微分、求導數等運算,MATLAB稱這些運算為符號運算。MATLAB的符號運算功能是通過調用符號運算工具箱(Symbolic Math Toolbox)內的工具實現,其內核是借用Maple數學軟體的。MATLAB的符號運算工具箱包含了微積分運算、化簡和代換、解方程等幾個方面的工具,其詳細內容可通過MATLAB系統的聯機幫助查閱,本節僅對它的常用功能做簡單介紹。
7.2.1 符號變數與符號表達式
MATLAB符號運算工具箱處理的對象主要是符號變數與符號表達式。要實現其符號運算,首先需要將處理對象定義為符號變數或符號表達式,其定義格式如下:
格式1: sym (『變數名』) 或 sym (『表達式』)
功能: 定義一個符號變數或符號表達式。
例如:
>> sym (『x』) % 定義變數x為符號變數
>> sym(『x+1』) % 定義表達式x+1為符號表達式
格式2: syms 變數名1 變數名2 …… 變數名n
功能: 定義變數名1、變數2 ……、變數名 n為符號變數。
例如:
>> syms a b x t % 定義a,b, x,t 均為符號變數
7.2.2 微積分運算
1、極限
格式:limit (f, t, a, 『left』 or 『right』)
功能:求符號變數t 趨近a 時,函數f 的(左或右)極限。『left』 表示求左極限,『right』 表示求右極限,省略時表示求一般極限;a省略時變數t 趨近0; t省略時默認變數為x ,若無x則尋找(字母表上)最接近字母x 的變數。
例如:求極限的命令及結果為:
>> syms x t
>> limit ((1+2*t/x)^(3*x) , x, inf )
ans=
exp(6*t)
再如求函數x / |x| ,當時的左極限和右極限,命令及結果為:
>> syms x
>> limit(x/abs(x), x, 0, 』left』) ans = -1
>> limit(x/abs(x),x, 0, 』right』) ans = 1
2、導數
格式: diff (f,t,n)
功能: 求函數f 對變數 t的n 階導數。當n省略時,默認 n=1;當t省略時,默認變數x, 若無x時則查找字母表上最接近字母x 的字母。
例如:求函數f=a*x^2+b*x+c對變數 x的一階導數, 命令及結果為
>> syms a b c x
>> f=a*x^2+b*x+c;
>> diff(f)
ans=
2*a*x+b
求函數f 對變數b的一階導數(可看作求偏導), 命令及結果為
>> diff(f,b) ans=x
求函數f 對變數x的二階導數, 命令及結果為
>> diff(f,2) ans=2*a
3、積分
格式: int(f,t,a,b)
功能: 求函數f 對變數 t從a 到b的定積分. 當a和b省略時求不定積分;當t省略時, 默認變數為(字母表上)最接近字母x的變數。
例如:求函數f=a*x^2+b*x+c對變數x不定積分, 命令及結果為
>> syms a b c x
>> f=a*x^2+b*x+c;
>> int(f)
ans=
1/3*a*x^3+1/2*b*x^2+c*x
求函數f 對變數b不定積分, 命令及結果為
>> int(f,b)
ans=
a*x^2*b+1/2*b^2*x+c*b
求函數f 對變數x 從 1到5的定積分, 命令及結果為
>> int(f,1,5)
ans=
124/3*a+12*b+4*c
4、級數求和
格式: symsum (s,t,a,b)
功能:求表達式s中的符號變數t從第a項到第b項的級數和。
例如: 求級數的前三項的和, 命令及結果為
>> symsum(1/x,1,3) ans=11/6
7.2.3 化簡和代換
MATLAB符號運算工具箱中,包括了較多的代數式化簡和代換功能,下面僅舉出部分常見運算。
simplify 利用各種恆等式化簡代數式
expand 將乘積展開為和式
factor 把多項式轉換為乘積形式
collect 合並同類項
horner 把多項式轉換為嵌套表示形式
例如:進行合並同類項執行
>> syms x
>> collect(3*x^3-0.5*x^3+3*x^2)
ans=
5/2*x^3+3*x^2)
進行因式分解執行
>> factor(3*x^3-0.5*x^3+3*x^2)
ans=
1/2*x^2*(5*x+6)
7.2.4 解方程
1、代數方程
格式:solve (f,t)
功能:對變數t 解方程f=0,t 預設時默認為x 或最接近字母x 的符號變數。
例如:求解一元二次方程f=a*x^2+b*x+c的實根,
>> syms a b c x
>> f=a*x^2+b*x+c;
>> solve (f,x)
ans=
[1/2/a*(-b+(b^2-4*a*c)^ (1/2))]
[1/2/a*(-b-(b^2-4*a*c)^ (1/2))]
2、微分方程
格式:dsolve(『s』, 』s1』, 』s2』,…, 』x』)
其中s為方程;s1,s2,……為初始條件,預設時給出含任意常數c1,c2,……的通解;x為自變數,預設時默認為t 。
例如:求微分方程的通解
>> dsolve(『Dy=1+y^2』)
ans=
tan(t+c1)
7.3 優化工具箱及其應用
在工程設計、經濟管理和科學研究等諸多領域中,人們常常會遇到這樣的問題:如何從一切可能的方案中選擇最好、最優的方案,在數學上把這類問題稱為最優化問題。這類問題很多,例如當設計一個機械零件時如何在保證強度的前提下使重量最輕
或用量最省(當然偷工減料除外);如何確定參數,使其承載能力最高;在安排生產時,如何在現有的人力、設備的條件下,合理安排生產,使其產品的總產值最高;在確定庫存時如何在保證銷售量的前提下,使庫存成本最小;在物資調配時,如何組織運輸使運輸費用最少。這些都屬於最優化問題所研究的對象。
MATLAB的優化工具箱被放在toolbox目錄下的optim子目錄中,其中包括有若干個常用的求解函數最優化問題的程序。MATLAB的優化工具箱也在不斷地完善。不同版本的MATLAB,其工具箱不完全相同。在MATLAB5.3版本中,對優化工具箱作了全面的改進。每個原有的常用程序都重新編制了一個新的程序。除fzero和fsolve外都重新起了名字。這些新程序使用一套新的控制演算法的選項。與原有的程序相比,新程序的功能增強了。在MATLAB5.3和6.0版本中,原有的優化程序(除fzero和fsolve外)仍然保留並且可以使用,但是它們遲早會被撤消的。鑒於上述情況,本書將只介紹那些新的常用的幾個優化程序。
⑸ 什麼是秦九韶演算法
秦九韶演算法是中國南宋時期的數學家秦九韶提出的一種多項式簡化演算法。在西方被稱作霍納演算法。
一般地,一元n次多項式的求值需要經過[n(n+1)]/2次乘法和n次加法,而秦九韶演算法只需要n次乘法和n次加法。在人工計算時,一次大大簡化了運算過程。
把一個n次多項式
改寫成如下形式:
求多項式的值時,首先計算最內層括弧內一次多項式的值,即
然後由內向外逐層計算一次多項式的值,即
這樣,求n次多項式f(x)的值就轉化為求n個一次多項式的值。
結論:對於一個n次多項式,至多做n次乘法和n次加法。[2] (當最高次項系數不為1時分別為n次乘法和n次加法 ,當最高次項系數為1時,分別為n-1 次乘法 ,n次加法。)
⑹ horner法則
。。。。。。演算法如下。
poly = 0;
poly(i=N; i>=0; i--)
poly = x * poly + A[i];
⑺ 有沒有人了解Horner演算法的
你的意思是計算
sigma(a(i,j,k)*x^i*y^j*z^k),sigma對i,j,k求和?
我有一個想法,但是和秦九韶的演算法不同,顯然他的演算法更先進。
可以藉助空間換取時間。
用遞推的方法填表f[m,n,p]使f[i,j,k]=x^i*y^j*z^k
最後求和s=..就可以
這種演算法浪費了空間,顯然不好。但是可以比較好的完成任務,時間復雜度O(MNP)己經是最低值。
另外可以優化空間,方法類似秦九韶演算法。類似滾動數組。其實沒有必要。你可以思考一下。先對x的0次方的y^j*z^k求和,它可以拆成多N個任務。這樣可以把空間復雜度降至O(1)。不過我認為沒有必要
⑻ 求3000字有關數學史的論文
從演算法教學管窺中國古代數學史
俞 昕
( 浙江湖州市第二中學 313000)
關於演算法的涵義, 人們有著不同的界定. 普
通高中數學課程標准( 實驗) 在學生演算法目標達
成度上,重在演算法思想的理解與應用,界定現代算
法的意義就是解決某一類問題的辦法. 確切地說,
就是對於某一類特定的問題,演算法給出了解決問
題的一系列(有窮) 操作, 即每一操作都有它的確
定性的意義( 使計算機能夠按照它的指令工作) ,
並在有限時間( 有窮步驟)內計算出結果.
普通高中數學課程標准( 實驗) 對! 演算法部
分∀進行說明時,突出強調! 需要特別指出的是, 中
國古代數學中蘊涵了豐富的演算法思想∀. 吳文俊
先生曾經說過! 我們崇拜中國傳統數學,決非泥古
迷古、 為古而古. 復古是沒有出路的. 我們的目的
不僅是要顯示中國古算的真實面貌, 也不僅是為
了破除對西算的盲從,端正對中算的認識,我們主
要的也是真正的目的, 是在於古為今用. ∀演算法教
學中蘊涵著豐富的數學史教育價值, 作為新時代
的高中數學教師是有必要了解這一點的.
1 中國古代數學的特點
古代數學思想分為兩大體系, 一個是以歐幾
里得的幾何原本 為代表的西方數學思想體系,
這個體系以公理化的思想、 抽象化的方法、 封閉的
演繹體系為特色. 另一個則是以我國的九章算
術 為代表的東方數學思想體系,這個體系以演算法
化的思想、 構造性的方法、 開放的歸納體系為特
色.我國傳統數學在從問題出發,以解決問題為主
旨的發展過程中, 建立了以構造性與機械化為其
特色的演算法體系, 這與西方數學以歐幾里得幾何
原本 為代表的所謂公理化演繹體系正好遙遙
相對.
中國古代數學中的! 術∀相當於現代數學術語
中的! 公式∀,兩者雖有相同點(都可以用來解決一
類有關問題) , 其差異也非常之大. 主要表現在,
! 公式∀只提供了幾個有關的量之間的關系, 指明
通過哪些運算可由已知量求出未知量,但並沒有
列出具體的運算程序,一般地,認為這種程序是已
知的了. 但! 術∀則由怎樣運算的詳細程序構成的,
可以說它是為完成公式所指出的各種運算的具體
程序,即把! 公式∀展開為使用某種計算工具的具
體操作步驟. 從這點看, ! 術∀正是現代意義上的算
法, 是用一套! 程序語言∀所描寫的程序化演算法,可
以照搬到現代計算機上去. 我國古代數學包括了
今天初等數學中的算術、 代數、 集合和三角等多方
面的內容.由於受實用價值觀的影響, 中國傳統數
學的研究遵循著一種演算法化思想,這種思想從九
章算術 開始一直是中國古代數學著作大都沿襲
的模式:
實際問題# # # 歸類# # # 籌式模型化# # # 程序化演算法
即將社會生產生活中的問題,先編成應用問題,按
問題性質分類, 然後概括地近似地表述出一種數
學模型, 藉助於算籌, 得到這一類問題的一般解
法. 把演算法綜合起來, 得到一般原理, 分別隸屬於
各章,人們按照書中的方法、 原理和實例來解決各
種實際問題. 可以說,中國傳統數學以確定演算法為
基本內容,又以創造和改進演算法為其發展的方向.
受九章算術 的影響,在之後的幾個世紀,一
些數學家的著作都以演算法為主要特點,包括王孝
通的輯古算經 、 賈憲的黃帝九章演算法細草 、 劉
益的議古根源 、 秦九韶的數書九章 、 李冶的
測圓海鏡 和益古演段 、 楊輝的詳解九章算
法 、 日用演算法 和楊輝演算法 , 這些著作中包括
了增乘開方術、 賈憲三角、 高次方程數值解法、 內
插法、 一次同餘式組解法等一些著名的演算法,進一
步發展了中國古代數學演算法化的特點,使得演算法
的特點得到了進一步的強化和發展.
1 1 中國古代數學的演算法化思想
演算法化的思想是中國古代數學的重要特點,
並貫穿於中國古算整個發展過程之中.即使是與
24 數學通報 2010 年 第49 卷 第2 期圖形有關的幾何問題也不例外,中算家們將幾何
方法與演算法有機地結合起來,實現了幾何問題的
演算法化.這樣,從問題出發建立程序化的演算法一直
是古代中國數學研究的傳統,也是中算家們努力
的方向.這種演算法化的思想著重構造實踐,更強調
! 經驗∀、 ! 發現∀和構造性思維方式下從無到有的
發明,對今天的演算法教學與研究具有重要的啟迪
作用.
中國古代數學演算法化的思想具體表現如下:
第一步,把實際中提出的各種問題轉化為數學模
型;第二步,把各種數學模型轉化為代數方程; 第
三步,把代數方程轉化為一種程序化的演算法; 第四
步,設計( 並逐步改進)、 歸納、 推導(寓推理於演算法
之中)出各種演算法; 第五步,通過計算回溯逐步達
到解決原來的問題.
1 2 中國古代數學的構造性方法
所謂構造性方法是解決數學問題的一種方
法,是創造性思維方式直接作用的結果.按照現代
直覺主義者,特別是構造主義者的觀點,對於一個
數學對象,只有當它可以通過有限次的操作而獲
得,並且在每步操作之後都能有效地確定下一步
所需要採取的操作, 才能說它是存在的.按照這種
思維方式,可以使概念和方法按固定的方式在有
限步驟內進行定義或得以實施,或給出一個行之
有效的過程使之在有限步驟內將結果確定地構造
出來.換言之,就是能用有限的手段刻畫數學對象
並針對問題提出具體的解法.
中國古代數學的演算法化思想與構造性的方法
緊密相連.由於古代中算家所關心的大多是較為
實用的問題,他們在解決問題時首先考慮是如何
得到可以直接應用的、 可以方便操作的解,而不會
滿足於僅僅知道解在理論上的存在性. 因為這種
純粹的理論解對於受實用價值觀影響的中算家來
說是沒有多大意義的.從而我們推斷,構造性方法
的產生是演算法化思想直接作用的結果.
從我國許多經典算書中可以發現, 數學構造
性方法在演算法中有許多精彩的體現. 例如就! 方
程∀的籌算圖陣及其程序設計而言,首先, ! 群物總
雜,各列有數,總言其實∀,這是對每行中未知數的
系數和常數項的安排,其次, ! 令每行為率,二物者
再程,三物者三程,皆如物數程之∀,這是對諸行關
系的安排, ! 並列為行∀又說明了什麼叫! 方程∀. 這
為中國古代數學的構造性方法提供了一個具有說
服力的樣板.
由於構造性的方法特別強調運算的可操作程
度, 所以構造出的! 術∀可以通過一系列有限的運
算求出解來, 具有一般性.時至今日我國古算家所
設計的許多演算法幾乎都可以整套照搬到現代的電
子計算機上實現.這也是我國古算在演算法上長期
居於領先地位的一個重要原因.
2 中國古代數學中的優秀演算法案例
2. 1 中國古代的代數學
代數學是中國傳統數學中一個值得驕傲和自
豪的領域.中小學數學中的算術、 代數內容, 從記
數以至解聯立的線性方程組, 實質上都是中國古
代數學家的發明創造.結合新課程的演算法教學,筆
者選取我國古代著名演算法進行分析.
2. 1. 1 求最大公約數的演算法(更相減損術)
中國古代數學中,未曾出現素數、 因數分解等
概念,但是發明了求兩整數的最大公約數的方
法# # # 更相減損術: ! 可半者半之,不可半者,副置
分母子之數, 以少減多, 更相減損,求其等也.以等
數約之. ∀事實上此術中包含了三個步驟:
第一步, ! 可半者半之∀, 即進行觀察, 若分子、
分母都是偶數,可先取其半;
第二步, ! 不可半者, 副置分母、 子之數, 以少
減多,更相減損,求其等也∀;
第三步, ! 以等數約之∀.
其中第二步! 以少減多, 更相減損∀是關鍵,又
是典型的機械化程序.在中國古代數學中, 將最大
公約數稱作! 等∀.由於! 更相減損∀過程終可以在
有限步驟內實現, 所以它是一種構造性的方法.若
用現代語言翻譯即為:第一步,任意給定兩個正整
數, 判斷它們是否都是偶數. 若是,用2 約減,若不
是, 執行第二步. 第二步, 以較大的數減去較小的
數, 接著把所得的差與較小的數比較, 並以大數減
小數.繼續這個操作, 直到所得的數相等為止, 則
這個數( 等數)或這個數與約簡的數的乘積就是所
求的最大公約數.下面運用 QBA SIC 語言來編寫
相應的程序( 見程序1) .
25 2010 年 第49 卷 第2 期 數學通報程序 1
INPUT! m, n= ∀ ; m, n
IF m< n T HEN
a= m
m= n
n= a
END IF
k= 0
WHILE m MOD 2= 0 AND n MOD2= 0
m= m/ 2
n= n/ 2
k= k+ 1
WEND
d= m- n
WHILE d< > n
IF d> n TH EN
m= d
ELSE
m= n
n= d
END IF
d = m- n
WEND
d= 2 ∃ k * d
PRINT d
END
程序 2
INPUT A, B
WHILE A < > B
IF A> B T H EN
A = A- B
ELSE
B= B - A
END IF
WEND
PRINT B
END
程序 3
INPUT ! M, N (M> N )∀ ; M, N
DO
R= M- N
IF R> N TH EN
M= R
ELSE
M= N
N= R
END IF
LOOP UNTIL R= 0
PRINT M
END
程序 4
INPUT ! n= ∀ ; n
INPUT! an= ∀; a
INPUT! x= ∀ ; x
v= a
i= n- 1
WH ILE i> = 0
PRINT ! i= ∀; i
INPUT! ai= ∀ ; a
v= v * x+ a
i= i- 1
WEND
PRINT v
END
程序 2和 3 是兩個簡化的參考程序, 是從不
同的角度來實現更相減損的過程.
! 更相減損術∀提供了一種求兩數最大公約數
的演算法, 這是九章算術 的一個重要成就, 與古希
臘歐幾里得的幾何原本 中用來求最大公約數的
! 歐幾里得演算法∀, 即輾轉相除法, 有異曲同工之
妙. 歐幾里得在幾何原本 中針對這個問題引入
了許多概念, 給出了冗長的邏輯證明. 盡管如此,
他還是暗用了一條未加說明的公理, 即如果 a, b
都被c 整除, 則a- mb也能被c 整除.中國古算采
用的! 更相減損∀方法,實際上也暗用了一條未加
說明的公理, 即若 a- b 可以被c 整除,則 a, b 都
能被c 整除. 正如劉徽在九章算術注 中! 其所以
相減者, 皆等數之重疊∀. 從形式上看! 更相減損
術∀比! 輾轉相除法∀更復雜, 循環次數要比輾轉相
除法多, 但對於計算機來說, 作乘除運算要比作加
減運算慢得多, 因此更相減損術在計算機上更為
好用.
26 數學通報 2010 年 第49 卷 第2 期2. 1. 2 求一元 n 次多項式值的演算法(秦九韶算
法)
秦九韶,南宋著名數學家,其學術思想充分體
現在數書九章 這一光輝名著中,該著作不僅繼
承了九章算術 的傳統模式, 對中算的固有特點
發揚光大,而且完全符合宋元社會的歷史背景, 是
中世紀世界數學史上的光輝篇章. 書中記載了! 正
負開方術∀、 ! 大衍求一術∀等著名演算法.
在數書九章 卷五第 17 個問題以! 尖田求
積∀為例的演算法程序中,可以看出秦九韶對於求一
元n 次多項式f ( x ) = anx
n
+ an- 1 x
n- 1
+ %+ a1x
+ a0 的值所提出的演算法.秦九韶演算法的特點在於
通過反復計算n 個一次多項式,逐步得到原多項
式的值. 在歐洲, 英國數學家霍納( Horner ) 在
1819 年才創造了類似的方法, 比秦九韶晚了572
年.秦九韶演算法把求f ( x ) = anx
n
+ an- 1 x
n- 1
+ %
+ a1x + a0 的 值 轉 化 為 求 遞 推 公 式
v0= an
vk= vk- 1x+ an- k k= 1, 2, %, n
中 v n 的值. 通
過這種轉化, 把運算的次數由至多( 1+ n) n
2
次乘
法運算和n 次加法運算,減少為至多 n 次乘法運
算和n 次加法運算,大大提高了運算效率.這種算
法的QBASIC 語言程序如程序 4 所示.演算法步驟
是如下的五步: 第一步, 輸入多項式次數 n、 最高
次項的系數an 和x 的值;第二步,將 v 的值初始
化為a v ,將i 的值初始化為n- 1; 第三步, 輸入 i
次項的系數ai ;第四步, v= v x+ ai , i= i- 1; 第五
步,判斷i 是否大於或等於 0, 若是, 則返回第三
步,否則輸出多項式的值v .
2. 2 中國古代的幾何學
中國古代的幾何學從田畝丈量等生產生活中
的一些實際問題中產生, 並為生產生活服務. 基於
傳統實用價值觀的影響, 中國古代的幾何學並沒
有發展成為像歐氏幾何那樣嚴密的公理化演繹體
系,所以中國古代幾何學在整個數學史上的地位
並不突出,但在許多幾何問題的處理上也突出了
演算法化這一特色. 下面以! 割圓術∀為例作簡要
分析.
中國古代數學家劉徽創立! 割圓術∀來求圓的
面積及其相關問題. 劉徽! 瓤而裁之∀,即對與圓周
合體的正多邊形進行無窮小分割,分成無窮多個
以正多邊形每邊為底、 圓心為頂點的小等腰三角
形, 這無窮多個小三角形的面積之和就是圓的面
積. 這樣通過對直線形的無窮小分割, 然後求其極
限狀態的和的方式證明了圓的面積公式.劉徽的
演算法! 割之彌細,所失彌少,割之又割, 以至於不可
割, 則與圓合體而無所失矣∀體現出程序化的過
程, 可以看出圓內接正多邊形逐漸逼近圓的變化
趨勢,並且劉徽依此開創了求圓周率精確近似值
的方法, 將這種極限思想用於近似計算.其中包含
有迭代過程和子程序,是一種典型的循環演算法,充
分體現了程序化的特點.
中算家的幾何學,並不追求邏輯論證的完美,
而是著重於實際計算問題的解決, ! 析理以辭, 解
體用圖∀, 以建立解決問題的一般方法和一般原
則. 但另一方面,這種幾何學又是以面積、 體積、 勾
股相似等為基本概念,以長方形面積演算法、 長方形
體積演算法、 相似勾股形的性質為出發點的, 整個幾
何理論建立在! 出入相補原理∀等基本原理之上.
例如,由勾股定理自然地引起平方根的計算問題,
而求平方根和立方根的方法, 其步驟就是以出入
相補原理為幾何背景逐步索驥而得.這方面內容
的介紹, 不僅可以豐富學生的演算法知識,而且可以
通過揭示蘊藏其中的數學背景和文化內涵, 激發
學生學習演算法的興趣,體會演算法在人類發展史中
的作用.
3 中國古代數學演算法的教學價值
3. 1 培養正確數學觀的良好平台
中國傳統演算法盡管與現代演算法在具體形式上
差別很大,但是重要的是形式後面的認識論發展
線索可以為現代演算法教學的體系、 教學層次提供
依據.它的具體數學知識載體也是現代演算法教學
的重要源泉. 各種演算法的創立就是創造性勞動的
產物,即是創造思維的一種! 凝固∀和! 外化∀. 其
次, 通過把一部分問題的求解歸結為對於現成算
法的! 機械應用∀, 這就為人們積極地去從事新的
創造性勞動提供了更大的可能性. 從而演算法化也
就意味著由一個平台向更高點的跳躍.
吳文俊先生的研究使中國傳統數學的演算法重
見天日, 開拓了數學機械化的新領域, 吳先生提出
! 數學教育的現代化就是機械化∀.他在研究中這
樣寫道: 數學問題的機械化, 就要求在運算和證明
過程中, 每前進一步之後,都有一個確定的必須選
27 2010 年 第49 卷 第2 期 數學通報擇的下一步, 這樣沿著一條有規律的, 刻板的道
路,一直達到結論.證明機械化的實質在於, 把通
常數學證明中所固有的質的困難,轉化為計算的
量的復雜性.計算的量的復雜性在過去是人力不
可能解決的,而計算機的出現解決了這種復雜性.
吳先生的理論和實踐已經表明,證明和計算是數
學的兩個方面, 且又是統一的,這在數學教育中具
有重要意義.我們應當引導學生了解古人對問題
思考的角度,學會站在巨人的肩膀上,比如按照中
國古代開方術的思路就可以編造程序在現代計算
機上實現開方.
培養學生在學習數學知識的同時更多地關心
所學知識的社會意義和歷史意義,力圖在面向未
來的同時,通過同傳統上的哲學、 歷史和社會學的
思想結合起來, 形成正確的數學觀.演算法教學就為
此搭建了一個良好的平台, 並且承載豐富的歷史
底蘊.
3. 2 滲透愛國主義教育的最佳契機
與西方相比, 中算理論具有高度概括與精練
的特徵, 中算家經常將其依據的算理蘊涵於演算
的步驟之中, 起到! 不言而喻, 不證自明∀的作用,
可以認為中國傳統數學乃是為建立那些在實際中
有直接應用的數學方法而構造的最為簡單, 精巧
的理論建築物. 因此, 中算理論可以說是一種! 綱
目結構∀:目是組成理論之網的眼孔;綱是聯結細
目的總繩.以術為目, 以率為綱,即是依演算法劃分
理論單元,而用基本的數量關系把它們連結成一
個整體. 綱舉目張,只有抓住貫串其中的基本理論
與原理, 才能看清演算法的來龍去脈.下面是吳文俊
先生總結的! 關於算術代數部分發明創造的一張
中外對照表∀.
從演算法教學管窺中國古代數學史
中國 外國
位值制十進位記 最遲在九章算術 成書時已十分成熟 印度最早在 6 世紀末才出現
分數運算 周髀算經 中已有, 在九章算術 成
書時已成熟 印度最早在 7 世紀才出現
十進位小數 劉徽注中引入, 宋秦九韶 1247年時已
通行 西歐 16 世紀時始有之, 印度無
開平方、 立方 周髀算經 中已有開平方, 九章算
術 中開平、 立方已成熟
西方在 4 世紀末始有開平方, 但還無開立方, 印度
最早在 7 世紀
算術應用 九章算術 中有各種類型的應用問題 印度 7 世紀後的數學書中有某些與中國類似的問
題與方法
正負數 九章算術 中已成熟 印度最早見於 7 世紀,西歐至 16 世紀始有之
聯立一次方程組 九章算術 中已成熟 印度 7 世紀後開始有一些特殊類型的方程組, 西
方遲至 16 世紀始有之
二次方程 九章算術 中已隱含了求數值解法,
三國時有一般解求法 印度在 7 世紀後,阿拉伯在 9世紀有一般解求法
三次方程 唐初( 公元 7 世紀初) 有列方程法, 求
數值解已成熟
西歐至 16 世紀有一般解求法, 阿拉伯 10 世紀有
幾何解
高次方程 宋時( 12 # 13 世紀)已有數值解法 西歐至 19 世紀初始有同樣方法
聯立高次方程組與消元法 元時( 14 世紀初) 已有之 西歐甚遲,估計在 19 世紀
28 數學通報 2010 年 第49 卷 第2 期3. 3 品位數學美學思想的美妙境界
中國古代數學不但具有實用性特徵, 還蘊涵
著豐富的美學思想. 比如九章算術 中列方程的
方式,相當於列出其增廣矩陣,其消元過程相當於
矩陣變換,而矩陣是數學美學方法中對稱最典型
的表現形式之一; 九章算術 中用幾何方法巧妙
地解決了很多代數問題, 這是數形結合的統一: 把
數學問題改編成歌訣,以便於掌握和傳授,這是文
學藝術與數學的統一. 總之, 在演算法教學中, 應努
力把握和利用自己文化傳統中的積極因素進行教
學,這對數學教育的發展具有重要的意義.
參考文獻
1 中學數學課程教材研究開發中心. 普通高中課程標准實驗教
材書(數學) [ M] . 北京: 人民教育出版社, 2007
2 中華人民共和國教育部. 普通高中數學課程標准(實驗) [ M] .
北京: 人民教育出版社, 2003
3 李文林. 數學史概論(第二版) [ M ] . 北京: 高等教育出版
社, 2002
4 王鴻鈞, 孫宏安. 中國古代數學思想方法[ M] . 南京: 江蘇教育
出版社, 1988
5 張維忠. 數學, 文化與數學課程[ M] . 上海: 上海教育出版
社, 1999
6 吳文俊. 吳文俊論數學機械化[ M ] . 濟南: 山東教育出版
社, 1995
7 代欽. 儒家思想與中國傳統數學[ M] . 北京: 商務印書館, 2003
8 費泰生. 演算法及其特徵[ J] . 數學通訊, 2004, 7
9 張奠宙. 演算法[ J] . 科學, 2003, 55( 2)
10 李建華. 演算法及其教育價值[ J ] . 數學教育學報, 2004, 3
11 李亞玲. 演算法及其學習的意義[ J ] . 數學通報, 2004, 2
(上接第23 頁) 實驗教師對課改實驗進行探索、 總
結、 反思、 調整, 推廣比較成熟的經驗,同時糾正實
驗過程中的偏頗與極端行為,教學過程逐步進入
新的穩定階段.教學過程逐步過渡到以問題為主
線、 以活動為主線的! 無環節∀模式.
( 2)受不同的教學理念影響, 教師角色、 學生
角色、 教學目標、 教學過程關注點等方面, 在教學
過程中有很大差異.
教師角色 學生角色 教學目標 教學過程關注
領導者
(權威)
接 受 者
(被動)
讓 學 生 掌
握 數 學 知
識技能
知識 引入, 講 解
本質, 鞏固練習
主導者
(決定)
觀 察 者
(協助)
讓 學 生 觀
摩 數 學 產
生過程
展示 過程, 注 重
建構, 強化訓練
引導者
(組織)
參 與 者
(主動)
讓 學 生 參
與 探 究 數
學 生 成 過
程
問題 情境, 提 出
問題, 學生活動
( 3) 2004 年高中數學課程改革後, 課堂教學
發生一定的變化,廣泛地進行! 創設情境∀! 提出問
題∀!引導學生探究探索∀, 出現了以! 問題主線∀、
! 活動主線∀為主的課堂, 出現了! 問題情境學生
活動建立數學運用數學同顧反思∀的整體課堂
構思.這些改變對於揭示數學的內在本質, 發展學
生的思維能力起到積極的作用.
( 4) 由於受多種因素制約(特別是高考) ,與初
中相比, 本次課改後高中數學課堂教學變化幅度
不大,近半數的課堂教學模式仍然以五環節為主.
對於課改倡導的教學理念, 只是滲透在傳統的教
學模式中,目前高中數學課堂教學改革的力度、 深
度與課改的預期目標還有一定的距離.我們看到
2008 年的賽課教案的創新、 探索力度, 遠沒有
1990 年的名師授課錄 大, 那時還沒有明確提出
課改理念,但他們卻進行積極的探索, 關注學生主
體. 而今天,課改的理念已經系統培訓 5 年, 許多
教師仍停留在形式層面,未能變成自覺的行為.
參考文獻
1 李善良. 我國數學教學設計的探索與評析# # # 兼及十年初中
數學教師說課評比活動[ J ] . 中國數學教育(初中版) , 2007, 9
2 編委會. 名師授課錄(中學數學高中版) [ M] , 上海教育出版
社, 1991
3 2000 年全國首屆高中青年數學教師優秀課觀摩與評比的教
案(會議資料)
4 2008 年全國第四屆高中青年數學教師優秀課觀摩與評比的
教案(會議資料)
5 李善良. 關於數學教學中問題的設計[ J] . 高中數學教與學,
2008, 1
29 2010 年 第49 卷 第2 期 數學通報
⑼ 簡述中國數學發展史上三個高峰時期,並談談中國古代數學的特色與局限.
中國數學發展的高峰
唐朝亡後,五代十國仍是軍閥混戰的繼續,直到北宋王朝統一了中國,農業、手工業、商業迅速繁榮,科學技術突飛猛進.從公元十一世紀到十四世紀﹝宋、元兩代﹞,籌算數學達到極盛,是中國古代數學空前繁榮,碩果累累的全盛時期.這一時期出現了一批著名的數學家和數學著作,列舉如下:賈憲的《黃帝九章演算法細草》﹝11世紀中葉﹞,劉益的《議古根源》﹝12世紀中葉﹞,秦九韶的《數書九章》﹝1247﹞,李冶的《測圓海鏡》﹝1248﹞和《益古演段》﹝1259﹞,楊輝的《詳解九章演算法》﹝1261﹞、《日用演算法》﹝1262﹞和《楊輝演算法》﹝1274-1275﹞,朱世傑的《算學啟蒙》﹝1299﹞和《四元玉鑒》﹝1303﹞等等.宋元數學在很多領域都達到了中國古代數學,也是當時世界數學的巔峰.其中主要的工作有:
公元1050年左右,北宋賈憲(生卒年代不詳)在《黃帝九章演算法細草》中創造了開任意高次冪的「增乘開方法」,公元1819年英國人霍納(william george horner)才得出同樣的方法.賈憲還列出了二項式定理系數表,歐洲到十七世紀才出現類似的「巴斯加三角」.(《黃帝九章演算法細草》已佚)
公元1088—1095年間,北宋沈括從「酒家積罌」數與「層壇」體積等生產實踐問題提出了「隙積術」,開始對高階等差級數的求和進行研究,並創立了正確的求和公式.沈括還提出「會圓術」,得出了我國古代數學史上第一個求弧長的近似公式.他還運用運籌思想分析和研究了後勤供糧與運兵進退的關系等問題.
公元1247年,南宋秦九韶在《數書九章》中推廣了增乘開方法,敘述了高次方程的數值解法,他列舉了二十多個來自實踐的高次方程的解法,最高為十次方程.歐洲到十六世紀義大利人菲爾洛(scipio del ferro)才提出三次方程的解法.秦九韶還系統地研究了一次同餘式理論.
公元1248年,李冶(李治,公元1192一1279年)著的《測圓海鏡》是第一部系統論述「天元術」(一元高次方程)的著作,這在數學史上是一項傑出的成果.在《測圓海鏡?序》中,李冶批判了輕視科學實踐,以數學為「九九賤技」、「玩物喪志」等謬論.
公元1261年,南宋楊輝(生卒年代不詳)在《詳解九章演算法》中用「垛積術」求出幾類高階等差級數之和.公元1274年他在《乘除通變本末》中還敘述了「九歸捷法」,介紹了籌算乘除的各種運演算法.公元1280年,元代王恂、郭守敬等制訂《授時歷》時,列出了三次差的內插公式.郭守敬還運用幾何方法求出相當於現在球面三角的兩個公式.
公元1303年,元代朱世傑(生卒年代不詳)著《四元玉鑒》,他把「天元術」推廣為「四元術」(四元高次聯立方程),並提出消元的解法,歐洲到公元1775年法國人別朱(etienne bezout)才提出同樣的解法.朱世傑還對各有限項級數求和問題進行了研究,在此基礎上得出了高次差的內插公式,歐洲到公元1670年英國人格里高利(james gregory)和公元1676一1678年間牛頓(issac newton)才提出內插法的一般公式.
公元十四世紀我國人民已使用珠算盤.在現代計算機出現之前,珠算盤是世界上簡便而有效的計算工具.
中國數學的特點與局限
(1)以演算法為中心,屬於應用數學.中國數學不脫離社會生活與生產的實際,以解決實際問題為目標,數學研究是圍繞建立演算法與提高計算技術而展開的.
(2)具有較強的社會性.中國傳統數學文化中,數學被儒學家培養人的道德與技能的基本知識---六藝(禮、樂、射、御、書、數)之一,它的作用在於「通神明、順性命,經世務、類萬物」,所以中國傳統數學總是被打上中國哲學與古代學術思想的烙印,往往與術數交織在一起.同時,數學教育與研究往往被封建政府所控制,唐宋時代的數學教育與科舉制度、歷代數學家往往是政府的天文官員,這些事例充分反映了這一性質.
(3)寓理於算,理論高度概括.由於中國傳統數學注重解決實際問題,而且因中國人綜合、歸納思維的決定,所以中國傳統數學不關心數學理論的形式化,但這並不意味中國傳統僅停留在經驗層次而無理論建樹.其實中國數學的演算法中蘊涵著建立這些演算法的理論基礎,中國數學家習慣把數學概念與方法建立在少數幾個不證自明、形象直觀的數學原理之上,如代數中的「率」的理論,平面幾何中的「出入相補」原理,立體幾何中的「陽馬術」、曲面體理論中的「截面原理」(或稱劉祖原理,即卡瓦列利原理)等等.
中國數學對世界的影響
數學活動有兩項基本工作----證明與計算,前者是由於接受了公理化(演繹化)數學文化傳統,後者是由於接受了機械化(演算法化)數學文化傳統.在世界數學文化傳統中,以歐幾里得《幾何原本》為代表的希臘數學,無疑是西方演繹數學傳統的基礎,而以《九章算術》為代表的中國數學無疑是東方演算法化數學傳統的基礎,它們東西輝映,共同促進了世界數學文化的發展.
中國數學通過絲綢之路傳播到印度、阿拉伯地區,後來經阿拉伯人傳入西方.而且在漢字文化圈內,一直影響著日本、朝鮮半島、越南等亞洲國家的數學發展.