Рассмотрим следующий код Matlab для аппроксимации интегралов с помощью симуляции.
function f
numSim = 1000000;
points = rand(numSim,1);
r3 = mean(feval('func3', points));
points1 = rand(numSim,1);
r8 = mean(feval('func8', points, points1));
disp([r3, r8,]);
end %f
%%%%%%%%%% Nested funcitons %%%%%%%%%%%%
function y = func3(x)
y = exp(exp(x));
end %func3
function z = func8(x,y)
z = exp((x+y).^2);
end %func8
Что я пробовал в R
f <- function (func3,func8){
numSim <- 1000000
points <- runif(numSim)
r3 <- mean(evaluate(points, func3))
points1 <- runif(numSim)
r8 <- mean(evaluate( points1,func8))
newList<-list(r3,r8)
return(newList)
}
# Nested functions
func3<-function(x) {
func3 <- exp(exp(x))
return(func3)
}
func8 <- function(x,y) {
func8<-exp((x+y)^2)
return(func8)
}
Первая проблема былапредупреждающее сообщение:
В mean.default (оценивать (точки, функция)): аргумент не является числовым или логическим: возвращается NA
Я добавил r3 <- mean(evaluate(points, func3),na.rm=TRUE)
и когда я набираю r3, вывод будет [1] NA,
, почему он не работает правильно?
Кроме того, был комментарий о вложенных функцияхне понимаю, как это сделать в R.