|
题目是用递推法求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后的有什么变化?
初来乍到,求大佬罩~
|
|