我有一个双曲函数,我需要找到它的0。我尝试过各种经典方法(二分法、牛顿法等)
二阶导数是连续的,但在分析上是不可访问的,所以我必须排除使用它们的方法
就我的应用而言,牛顿法是唯一一种提供足够速度的方法,但如果我离实际零点不够近,它相对不稳定。以下是一个简单的屏幕截图:
零点在0.05左右。由于函数在0处发散,如果我的初始猜测值大于某个范围内的最小位置,那么我显然对渐近线有问题
在这种情况下,是否有一种更稳定的方法最终能提供与牛顿相当的速度
我还想把这个函数变换成一个等价的更好的函数,用相同的零,然后再应用牛顿,但我真的不知道我能做哪些变换
任何帮助都将不胜感激
用log(x)代替x怎么样
对于你的情况,@sams studio的答案可能有用,我会先试试。在类似的情况下,也在多变量环境中,我使用了牛顿同伦方法
基本上,可以限制牛顿步长,直到
y
的绝对值下降。 最便宜的实现方法是,如果y
从上一步开始增加,则可以减少牛顿步的一半。经过几步,你回到牛顿,完全二阶收敛Disclamer:如果你能约束你的解(你知道一个极大的
x
),那么@Lutz Lehmann的答案也是我的第一选择Dekker或Brent的方法应该几乎和牛顿一样快。如果你想自己实现一些简单的东西,regula-falsi方法的伊利诺伊变体也相当快。这些都是括号内的方法,因此如果初始间隔在域内,则不应离开域
相关问题 更多 >
编程相关推荐