2016-09-11 37 views
-1

我一直试图围绕这个问题来解决这个问题,但不幸的是我对积分和R都很陌生。谁能帮我弄清楚我在这里可能会做错什么?问题如下: Question 3R中的基本集成过程

这里是我到目前为止的代码:

## Question 3 
rm(list=ls()) 

## a) 
X<-(2*(1:20)) 
X 

## b) 
Y<-rep(0,20) 
Y 

## c) 
for (k in 1:20){ 
    Y[k] <- k 
    if (k < 12){ 
    Y[k]<-cos(3*k) 
    } else if (k >= 12) { 
    integral <- function(t) sqrt(t) 
    Y[k]<-integrate(integral, lower = 0, upper = k) 
    } 
} 
Y 

这里是我的输出,当我运行代码:

Warning messages: 
1: In Y[k] <- integrate(integral, lower = 0, upper = k) : 
    number of items to replace is not a multiple of replacement length 
2: In Y[k] <- integrate(integral, lower = 0, upper = k) : 
    number of items to replace is not a multiple of replacement length 
3: In Y[k] <- integrate(integral, lower = 0, upper = k) : 
    number of items to replace is not a multiple of replacement length 
4: In Y[k] <- integrate(integral, lower = 0, upper = k) : 
    number of items to replace is not a multiple of replacement length 
5: In Y[k] <- integrate(integral, lower = 0, upper = k) : 
    number of items to replace is not a multiple of replacement length 
6: In Y[k] <- integrate(integral, lower = 0, upper = k) : 
    number of items to replace is not a multiple of replacement length 
7: In Y[k] <- integrate(integral, lower = 0, upper = k) : 
    number of items to replace is not a multiple of replacement length 
8: In Y[k] <- integrate(integral, lower = 0, upper = k) : 
    number of items to replace is not a multiple of replacement length 
9: In Y[k] <- integrate(integral, lower = 0, upper = k) : 
    number of items to replace is not a multiple of replacement length 
> Y 
[[1]] 
[1] -0.9899925 

[[2]] 
[1] 0.9601703 

[[3]] 
[1] -0.9111303 

[[4]] 
[1] 0.843854 

[[5]] 
[1] -0.7596879 

[[6]] 
[1] 0.6603167 

[[7]] 
[1] -0.5477293 

[[8]] 
[1] 0.424179 

[[9]] 
[1] -0.2921388 

[[10]] 
[1] 0.1542514 

[[11]] 
[1] -0.01327675 

[[12]] 
[1] 27.71282 

[[13]] 
[1] 31.24811 

[[14]] 
[1] 34.92214 

[[15]] 
[1] 38.72984 

[[16]] 
[1] 42.66667 

[[17]] 
[1] 46.72854 

[[18]] 
[1] 50.91169 

[[19]] 
[1] 55.21273 

[[20]] 
[1] 59.62849 

我对B值)似乎不正确使用计算器检查结果时,我不知道为什么我收到c)的警告。我也不熟悉积分,所以我不知道我应该期待什么样的价值观。感谢您提供任何帮助!

+0

您可能会发现使用一个简单的表达式来计算t ^(1/2)的积分在适当的限制条件下评估是有帮助的。该问题没有具体说明你必须使用R代码来评估积分。 – Robert

+0

谢谢我欣赏帮助! –

回答

0

问题是,integrate(...)给你一个list作为结果,你想在一个向量中替换它。这是错误。

integral <- function(t) sqrt(t) 
result <- integrate(integral, lower = 0, upper = 1) 
is(result) 
# [1] "integrate" "oldClass" 

result$value 
# [1] 0.6666667 

此处为您的问题的解决方案。你的第二行是没有必要的。

for (k in 1:20){ 
    if (k < 12){ 
    Y[k]<-cos(3*k) 
    } else if (k >= 12) { 
    integral <- function(t) sqrt(t) 
    result <- integrate(integral, lower = 0, upper = k) 
    Y[k] <- result$value 
    } 
} 
+0

非常感谢! –

+0

您可以标记答案并对其进行投票,以表明此解决方案是正确的。 –