【发布时间】:2019-05-18 21:57:16
【问题描述】:
我正在尝试在 Haskell 上实现 Newton-Raphson 方法,到目前为止,我已经设法通过使用 iterate 函数使其工作,但问题是它会重新调整无限列表,因为它的性质迭代函数,所以我正在寻找一种方法,当迭代中获得的值落入设定的误差范围时停止循环,并返回所述值
我在这里查看了一些博客文章甚至一些问题,但我对 haskell 还很陌生,并且对语法并不完全精通,所以对我来说,现在阅读代码示例或文档真的很困难。
f(x) 和 g(x)(导数)的定义无关:
newton x0 = iterate step x0
where step xn = xn - ((f xn)/(g xn))
我目前正在通过在 GHCi 提示符中使用 take 4 $ newton 3.5 获取给定列表的第一个元素,但 iterate 返回的列表是无限的,所以我不能对其使用 tail 函数。
我的想法是在某处设置一个常量,margin = 0.0001 或类似的东西,当牛顿函数的最后一次迭代落在边距之后,iterate 函数停止,我得到了最终结果
【问题讨论】:
-
也许你想考虑
takeWhile。 -
"
iterate返回的列表是无限的,所以我不能对它使用尾函数。" 为什么不呢?tail在无限列表上运行良好。 -
切线说明:如果您想使用具有不同功能和边距的
newton,则将f、g和margin作为参数传递可能会很有用。 -
until函数怎么样?