我想计算整合以下功能
riskFunction <- function(theta, n, r, s)
{
risk <- 0
for (j in 1:n)
{
risk <- risk + abs(theta - r * j - s) * dbinom(j, n, theta)
}
return(risk)
}
在区间[0,1]上使用梯形方法。那是我的代码
trapeizodalMethod <- function(a, b, m, n, r, s)
{
intValue <- 0
h <- (b - a)/m
for (i in 0:m-1)
{
intValue <- intValue + 0.5 * (riskFunction(a + i * h, n=n, r=r, s=s) + riskFunction(a + (i + 1) * h, n=n, r=r, s=s)) * h
}
return(intValue)
}
调用梯形方法
trapeizodalMethod(a=0, b=1, m=100, n=100, r=0.01, s=0)
发生超过50个错误:在dbinom(j,100,theta)中:产生的NaN。
我不知道可能出了什么问题。我将不胜感激。
[dbinom(x, size, prob, log = FALSE)
的prob
在[0, 1]
之外时,会发出警告。在您的情况下,发生theta = -0.01
是因为循环未按预期运行。
二进制运算符:
的优先级高于二进制运算符-
。因此,例如1:5-1
被评估为(1:5) - 1
,而不是1:(5 - 1)
。您想要
trapeizodalMethod <- function(a, b, m, n, r, s)
{
intValue <- 0
h <- (b - a)/m
for (i in 0:(m-1)) {
# ^^^^^
intValue <- intValue + 0.5 * (riskFunction(a + i * h, n=n, r=r, s=s) + riskFunction(a + (i + 1) * h, n=n, r=r, s=s)) * h
}
return(intValue)
}