2016-12-02 45 views
0

我尝试这个功能在K1整合& M1是两个输入向量传递两个或更多的载体来整合功能

k_z <- function(z, k1, m1) { 
    k_z <- k1 * exp(-z/m1) 
} 

我改编自this question

integrate(Vectorize(k_z, vectorize.args = "z"), upper = 2, lower = 0, k1 = rnorm(10), m1 = rnorm(10)) 

的解决方案,但得到了以下错误

​​

我已经尝试了很多不同的方法来没有AV AIL。我做错了什么?谢谢!

回答

1

您的函数k_z不是一个标量点'函数',因为它不会返回单个值,因为集成函数需要参数的一组值(因为它是1对多的) :让k_z返回类似下面的一个值,它会工作:

k_z <- function(z, k1, m1) { 
    sum(k1 * exp(-z/m1)) # return a single value, not a vector of multiple values 
} 

k_z_vec <- Vectorize(k_z, vectorize.args = "z") 
integrate(k_z_vec, upper = 2, lower = 0, k1 = rnorm(10), m1 = rnorm(10)) 
# -7.338221e+14 with absolute error < 1.4e+07 

如果要计算使用不同的值多次整合从 矢量K1和M1,你可以尝试以下方法:

k_z <- function(z, k1, m1) { 
    k1 * exp(-z/m1) 
} 
k1 <- rnorm(10) 
m1 <- rnorm(10) 
sapply(1:10, function(x) integrate(k_z, upper = 3, lower = -3, k1=k1[x], m1=m1[x])) 

      [,1]   [,2]   [,3]   [,4]   [,5]  [,6]   [,7]   [,8]   [,9]   [,10]  
value  -21.4522  4.330284e+40 19.4474  3.900487e+21 9649111978 2.092415e+57 -34.86148 10103.57  -8.232609 46.35694  
abs.error 2.381672e-13 2.705507e+35 2.159095e-13 1.129735e+17 83251.15 1.180714e+49 3.870402e-13 0.0003484398 9.140032e-14 5.942846e-10 
subdivisions 1   4   1   3   2   5   1   1   1   1   
message  "OK"   "OK"   "OK"   "OK"   "OK"  "OK"   "OK"   "OK"   "OK"   "OK"   
call   Expression Expression Expression Expression Expression Expression Expression Expression Expression Expression 
+0

非常感谢您的帮助!它现在有效 – Tung