2016-09-11 42 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

您可以標記答案並對其進行投票,以表明此解決方案是正確的。 –