我目前正在編寫一個計算器應用程序。我正在試圖寫一個派生估計器。下面的公式是一個簡單的方法。通常在紙上,您可以使用最小的h來獲得最準確的估計值。問題是雙打無法處理增加真正的小數字到相對龐大的數字。如4 + 1E-200只會導致4.0。即使h只是1E-16,4 + 1E16實際上會給你正確的價值,但是做數學它是不準確的,因爲在第16名之後的任何東西都會丟失,舍入不能正確發生。我聽說雙打的一般經驗法則是1E-8或1E-7。與此問題是大數不會工作,因爲2E231 + 1E-8將只是2E23,1E-8將因爲尺寸問題而丟失。Java在某個點估算衍生物
f'(x)=(f(x+h)-f(x))/h as x approaches 0
當我測試F(X)= X^2點4,使f'(4),它應該是正好是8 現在我明白了,我可能永遠不會得到完全8.但我最準確的似乎是1E-7或1E8 有趣的是1E-9到1E-11都給出了相同的答案。 這裏是f(x)=x^2 at x=4
1E-7 8.000000129015916
1E-8 7.999999951380232
1E-9 8.000000661922968
1E-10 8.000000661922968
1E-11 8.000000661922968
1E-12 8.000711204658728
這裏是我的問題,H公司和結果的列表:
- 什麼是挑小時最好的辦法,顯然1E-8或1E-7是有意義的,但如何我可以根據x選擇一個h,這樣即使x是3.14E203或2E-231,它也可以處理任何大小的數字。
- 我應該考慮多少精度小數。
- 您是否知道德州儀器是如何做到這一點的?TI 83,84和Inspire能夠以數值的方式計算出12位小數或精度的衍生物,並且幾乎總是正確的,但其數字的最大精度無論如何都是12位數字,那些計算器是非CAS的,所以它們實際上並沒有得到任何東西
- 從邏輯上看,1E-7到1E-8之間有一個數字,這會給我一個更精確的結果,有沒有辦法找到這個數字,或者最少接近它。
ANSWERED
非常感謝您BobG。該應用程序目前計劃使用兩種形式,一種命令行PC應用程序。和一個Android應用程序。您將特別感謝關於頁面的部分內容。如果你希望它會是開源的,但我不會發布鏈接到項目網站,直到我找出一些非常大的錯誤。目前我一直稱它爲Mathulator,但名稱可能會因爲已經有版權而改變,聽起來很愚蠢。當候選發行版運行時,我一點也不知道,當時我不知道它是什麼時候將會保持穩定。但如果我能實現我想要的一切,它將會非常強大。再次感謝。快樂編程。
我得到了1E-7和1E-8的平均值更多的十進制小數。這就是5.4999999999999996E-8,得到的結果是8.000000080569821 – 2011-04-04 20:18:13
參見[數值微分](http://en.wikipedia.org/wiki/Numerical_differentiation)。 – trashgod 2011-04-04 20:34:01