2013-05-23 4 views
2

Я хочу составить список функций, а затем создать новую функцию, являющуюся продуктом этих функций. Например, я хочу сделать функции (x-4i)^2, для i=1:50, а затем сделать продукт g=prod_i=1^50 (x-4i)^2. После этого я хочу взять интеграл функции продукта.Функция функций в списке

Для того, чтобы список функций, я:

f <- lapply(1:50, function(i){ force(i); function(x) {(x-4i)^2}}) 

Тогда у меня есть список всех функций, которые я хочу. Моя проблема заключается в том, как сделать продукт как функцию? Я пробовал много способов, но это всегда приводит к «бесконечной рекурсии». Может кто-нибудь, пожалуйста, помогите мне?

+3

это определенно не html. что это? – Doorknob

+1

@Doorknob Я думаю, что это 'r'. 'lapply' - это функция, доступная в' r'. – mattytommo

+1

Если вы хотите, чтобы нужные люди находили и отвечали на этот вопрос, отметьте его правильно. – deceze

ответ

1

Прежде всего x-4i имеет особое значение: оно становится сложным числом. Я подозреваю, что вы хотите использовать x-4*i. Так,

f <- lapply(1:50, function(i){ force(i); function(x) {(x-4*i)^2}}) 

Чтобы получить функцию продукта этих функций вы должны оценить их в точке до умножения:

fprod <- function(x) prod(sapply(f,function(y) y(x))) 
fprod(0) 
[1] 1.486445e+189 
fprod(1) 
[1] 1.394667e+188 

Для интеграции, вам нужно будет использовать Vectorize d функцию:

integrate(Vectorize(fprod),0,10) 
6.328303e+188 with absolute error < 2.1e+181 

Но обратите внимание, что такие большие числа могут иметь проблемы с точностью.

Смежные вопросы