- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
double MyClass::dx = ?????;
double MyClass::f(double x)
{
return 3.0*x*x*x - 2.0*x*x + x - 5.0;
}
double MyClass::fp(double x) // derivative of f(x), that is f'(x)
{
return (f(x + dx) - f(x)) / dx;
}
当使用有限差分法进行推导时,选择一个最佳的dx
值是很关键的。从数学上讲,dx
必须尽可能小。但是,我不确定选择最小正 double (即 2.2250738585072014 x 10−308)是否正确。
是否有一个最佳的数值区间或精确值来选择一个dx
使计算误差尽可能小?
(我使用的是 64 位编译器。我将在 Intel i5 处理器上运行我的程序。)
最佳答案
选择尽可能小的值几乎肯定是错误的:如果 dx
是那个最小的数字,那么 f(x + dx)
将恰好 由于四舍五入,等于 f(x)
。
因此您需要权衡:将 dx
选择得太小,并且您会因舍入误差而失去精度。选择太大,由于 x 变化时导数的变化,您的结果将不精确。
要判断数值错误,请从数学上考虑 (f(x + dx) - f(x))/f(x)
1。分子表示您要计算的差异,但分母表示您正在处理的数字的大小。如果该分数大约为 2‒k,那么您的结果可以达到大约 k 位的精度。
如果您知道您的函数,您可以计算出如果选择太大的 dx
会导致什么错误。然后您可以平衡事物,因此由此产生的误差与舍入产生的误差大致相同。但是,如果您知道该函数,那么通过提供一个直接计算导数的函数可能会更好,就像在您使用多边形 f
的示例中一样。
Wikipedia section那个pogorskiy pointed out建议值为 sqrt(ε)x,或大约 1.5e-8 * x
。在没有关于函数的任何更详细的知识的情况下,这样的经验法则将提供合理的默认值。另请注意,同一部分建议不要除以 dx
,而是除以 (x + dx) - x
,因为这需要计算 x + 时产生的舍入误差dx
考虑在内。但我想整篇文章都充满了您可能会用到的建议。
1 这个公式确实应该除以 f(x)
,而不是 dx
,尽管以前的编辑有不同的想法。我试图比较除法后剩余的有效位数,而不是切线的斜率。
关于c++ - 在有限差分法中使用的最佳 epsilon/dx 值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13430123/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我有实体: @Entity @Table(name = "CARDS") public class Card { @ManyToOne @JoinColumn(name = "PERSON_I
我正在尝试计算二维多边形的表面法线。我正在使用 OpenGL wiki 中的 Newell 方法来计算表面法线。 https://www.opengl.org/wiki/Calculating_a_S
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我这里有以下 XML: Visa, Mastercard, , , , 0, Discover, American Express siteonly, Buyer Pay
即将发生的 Google 政策变更迫使我们实现一个对话框,以通知欧盟用户有关 Cookie/设备标识符用于广告和分析的情况。我只想向欧盟用户显示此对话框。我不想使用额外的权限(例如 android.p
本文分享自华为云社区《华为大咖说 | 企业应用AI大模型的“道、法、术” ——道:认知篇》,作者:华为云PaaS服务小智。 本期核心观点 上车:AGI是未来5~10年内,每个人都无法回避的技
我有一个与酒精相关的网站,需要先验证年龄,然后才能让他们进入该网站。我使用 HttpModule 来执行此操作,该模块检查 cookie,如果未设置,我会将它们重定向到验证页面。我验证他们的年龄并存储
在欧盟,我们有一项法律,要求网页请求存储 cookie 的许可。我们大多数人都了解 cookie 并同意它们,但仍然被迫在任何地方明确接受它们。所以我计划编写这个附加组件(ff & chrome),它
以下在 C 和/或 C++ 中是否合法? void fn(); inline void fn() { /*Do something here*/ } 让我担心的是,第一个声明看起来暗示函数将被定义
我是一名优秀的程序员,十分优秀!