徐庐飞\LuffyXu 发表于 2017-10-22 22:53:48

初学R语言,迭代法求助

题目是用递推法求1/x在区间内的积分,精度要求是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的区间始终还是,lim的次数-1后的有什么变化?

初来乍到,求大佬罩~


页: [1]
查看完整版本: 初学R语言,迭代法求助