我目前正在编写一个计算器应用程序。我正在试图写一个派生估计器。下面的公式是一个简单的方法。通常在纸上,您可以使用最小的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