【发布时间】:2011-06-14 00:11:03
【问题描述】:
对于 VBA 人员来说,这是一个非常简单的问题。我在某些函数上运行牛顿法,偶尔我发现我只能假设溢出 Exp() 函数(并停止代码)。你们有什么建议可以简单地处理这个案子? (也许是某种错误处理?)
如果牛顿的方法由于这种或任何类型的爆炸而失败,我想在该点以下继续我的二等分代码。
顺便说一句,我考虑过记录日志以降低这种情况的可能性,但老实说,我正在处理一些我尚未完全理解的数学,并且我想处理牛顿方法失败的情况无论如何都要先。
免责声明:我是一个完整的 VBA 初学者,所以任何建议都会被阅读和赞赏。提前致谢。
编辑:我被要求发布代码。首先,感谢阅读。不幸的是,由于业务原因,我无法发布整个代码,但我可以给出非常简单的大纲。我创建了一个模块和一个函数。在这个函数中,我有:
Newtons Method Loop
Bisection Loop
在牛顿的方法循环中,我已经追踪到一个点,我的下一个猜测大约是 28,000 左右,我将值 Exp(28,000) 分配给一个变量 h或环岛。调试器在那个时候中断;我的代码基本上退出了,我的函数应该返回的任何值都会产生#VALUE!在我的牢房里。
我知道这不是很多信息,但我希望(并认为)它应该足够了。如果我错了,请纠正我。
编辑 2:如果所有其他方法都失败了,我将明确捕获太大的值,但我想知道是否有更健壮和优雅的解决方案。
【问题讨论】:
-
请发布导致错误的代码以及一些示例输入和预期输出 - 如果没有关于正在发生的事情的一些信息,很难尝试追踪错误。
-
如果您使用 Excel,您是否考虑过使用 Solver 或 Goal Seek 而不是编写自己的函数?
-
我查看了 Goal Seek 背后的方法,我猜我的应用程序收敛速度太慢。 Solver 看起来更有趣。我可能会对此进行研究,看看它如何使将来从 VBA 中查找根变得更容易。