周啟楠
【摘要】這篇論文說明了一種JAVA在微積分計算中的創(chuàng)新方法及其應(yīng)用。
【關(guān)鍵詞】JAVA;積分;微分;微積分;向量;極限;求和
一、介紹
JAVA這種方法在定積分的上下限過大時,電腦的運算速度會大大減慢,而且精度也會有一定的損失。所以,我提供了一下一種用JAVA計算微積分的創(chuàng)新方法,以克服這些傳統(tǒng)方法所存在的缺點。
二、微分
在解決上述存?zhèn)鹘y(tǒng)方法中的問題之前,我們應(yīng)該先要知道導(dǎo)數(shù)的定義?!癟he derivative of f at x is given by
provided the limit exists.For all x for which this limit exists,fis a function of x”[4],也就是說在x值所對應(yīng)一個函數(shù)f上的點的導(dǎo)數(shù)為:
我們都知道,在定義中,我們必須要有兩個點來計算一階導(dǎo)數(shù)。
在傳統(tǒng)方法中我們用的是點(x,f(x))和點(x+h,f(x+h)),且要求h要盡可能地接近于0。
下一步就是研究為什么傳統(tǒng)方法在x很大時會失去精度。事實上,當(dāng)x增加時,一個函數(shù)的斜率也會增加。所以當(dāng)x很大時,斜率的值也會變得非常的大。一個很大的斜率就意味著一個很大的rate of change。也就是說,一個x值很小的改變都會引起在y值上很大的改變,進而產(chǎn)生了更大的斜率。與傳統(tǒng)方法相比,這種方法更精確。下面我們來討論這個現(xiàn)象的主要原因。我們再拿點(1,f(1))作例子。很明顯可以發(fā)現(xiàn),連接點(1-h,f(1-h))和(1+h,f(1+h))的直線平行于點(1,f(1))的切線,但是連接點(1,f(1))和(1+h,f(1+h))的直線不平行于點(1,f(1))的切線。所以,連接點(1-h,f(1-h))和(1+h,f(1+h))的直線的斜率與切線的斜率更接近。所以,這種新方法或更正確。
以下是對這觀點的證明。我們再以為例子。不過與上次不同的是,這次中的差由使用symmetric difference quotient所得出的,而不用Newtons difference quotient。
我們這里用的是實際值和理想值的差表示電腦計算的誤差。我們都可以看到,我們成功地控制了誤差,使得誤差保持在0.0001。但當(dāng)x=1000,好像這個差變?yōu)榱?。但是,在這里這個誤差仍是0.0001。在這里,其實是因為實際值很大,所以0.0001與實際值比起來很小,所以由于計算自身的原因,這一點小誤差就被電腦省略了。
所以,現(xiàn)在在計算微分的時候還是有一些誤差的。我們還需要更精確點。
為了更進一步地提高準確度,我們還需要調(diào)試h的值。h的值越小,兩點越近。兩點越近,結(jié)果就越準確。
當(dāng)h=0.0000000001時,結(jié)果是300。這看起來,已經(jīng)把誤差消除了。但事實上,誤差還在,只是太小了,電腦自動把它忽略了。所以h的最佳值為0.0000000001。
三、積分
在解決上述存?zhèn)鹘y(tǒng)方法中的問題之前,我們應(yīng)該先要知道定積分的定義?!癐f f is defined on the closed interval [a,b] and the limit of Riemann sums over partitionsexists,...the limit is denoted
by.The limit is called definite integral.”[8]
也就是說定積分實際上是無數(shù)個寬為h(h趨近于0)和長為f(x)的面積之和。
基于這個概念,傳統(tǒng)方法也就產(chǎn)生了。以right Riemann sum of rectangles方法為例,我們把要積分的區(qū)域分成很多小小的矩形。然后,我們把它們依次加起來,這樣就能得到一個與積分值相近的一個值了。
下一步就是研究為什么傳統(tǒng)方法在上下限很大時會變得很慢。
讓我們再以right Riemann sum of rectangles方法為例。正如我們在之前提到的,為了計算定積分,傳統(tǒng)方法要先計算這些小矩形的面積和。為了使結(jié)果有較高的精度,每一個小矩形都要很小很小,以至于計算一次定積分所用的小矩形會很多很多。
不幸的是,這個想法不能很好地運用到JAVA中。在JAVA中計算就和的常用方法是創(chuàng)造一段for-loop。在for-loop里面,電腦先把頭兩項相加,然后拿這兩項的和去加第三項,以此類推。所以,矩形越多,計算機就會有越多的計算步驟。
當(dāng)矩形的數(shù)量或者說是上下限的值非常大時,計算機計算的次數(shù)就非常多,以至于計算速度大大減慢。
仍以為例,來證明我們這個想法。
很明顯我們可以發(fā)現(xiàn),當(dāng)矩形的數(shù)量增加時,電腦所花在計算上的時間也變大了。當(dāng)上下限的差增加時,時間也增加了。
所以,我們要尋找一個更好的計算定積分的方法,最好能在很大程度上較少for-loop的執(zhí)行次數(shù)或者甚至不用循環(huán)。
所以,我提供了一種新方法,這種方法不會要就太多的循環(huán)次數(shù),有時以至于不會有循環(huán)產(chǎn)生。讓我們來看看這個方法。
在解釋方法之前,我們先來研究一種特殊的函數(shù)一一二次函數(shù),來看看我們有什么很好的方法去計算二次函數(shù)的定積分。我們來介紹一個計算二次函數(shù)定積分的規(guī)律。“If,then”.[9]
這是一個計算二次函數(shù)非常好的方法,因為我們不需要為了計算定積分而使用傳統(tǒng)方法中的求和。我們只用把公式代入,計算一次就可以了。所以,也就不需要有for-loop了。所以,這種方法會有更快的執(zhí)行速度。
我們比較下兩種方法。仍以為例。
很明顯,新方法的計算速度更快。
上述的規(guī)律是Simpsons Rule的基礎(chǔ),Simpsons Rule同樣也是一個計算積分的很好方法。“Let f be continuous on [a,b] and let n be an even integer.Simpsons Rule for approximating the integral of function f(x) is:”.[10]
也就是說,如果說把任意一個函數(shù)分成n份,那么其函數(shù)的定積分值就滿足這個公式。
四、總結(jié)
有了這樣高的精度和效率,這段代碼和這個方法能運用到很多不同的領(lǐng)域,尤其是物理,數(shù)學(xué)和工程。在這些領(lǐng)域里,這個新方法可以提高計算的效率,也可以使測量更加精確。
參考文獻
[1]http://en.wikipedia.org/wiki/Numerical_differentiation.
[2]Bock D.,M.S & Hockett O.S.,M.A.,Barrons AP Calculus 11th Edition,World Book Edition Cooperation,page 257-259.