找回密码
 立即注册
查看: 4630|回复: 0

初学R语言,迭代法求助

[复制链接]
发表于 2017-10-22 22:53:48 | 显示全部楼层 |阅读模式
题目是用递推法求1/x在[1,5]区间内的积分,精度要求是1e-6。例子给出求解函数的代码如下:
area <- function(f, a, b, eps = 1.0e-06, lim = 10) {
   fun1 <- function(f, a, b, fa, fb, a0, eps, lim, fun) {
       d <- (a + b)/2; h <- (b - a)/4; fd <- f(d)
       a1 <- h * (fa + fd); a2 <- h * (fd + fb)
       if(abs(a0 - a1 - a2) < eps || lim == 0)
          return(a1 + a2)
       else {
          return(fun(f, a, d, fa, fd, a1, eps, lim - 1, fun)
          fun(f, d, b, fd, fb, a2, eps, lim - 1, fun))
       }
   }
   fa <- f(a); fb <- f(b); a0 <- ((fa + fb) * (b - a))/2
   fun1(f, a, b, fa, fb, a0, eps, lim, fun1)
}

由于刚刚接触R语言编程,对迭代有点看不懂。求高人指点:
1)上面定义了fun1,但是fun没有定义过,这两个是有上面联系的吗?
2)其实上面看不懂的是就三行:fun1(……,fun),fun(……,fun)和fun1(……,fun1)。从第一个循环,我可以了解这个是通过梯形面积来进行逼近的,但这三句代码是如何完成迭代的,我完全没有理解,因为fun1的区间始终还是[a,b],lim的次数-1后的有什么变化?

初来乍到,求大佬罩~


2.jpg
1.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-22 08:32 , Processed in 0.026030 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表