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

ここでは問題の解決方法を示します。 2行目は必要ありませんでした。

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

あなたは答えをマークして投票して、この解決策が正しいことを示すことができます。 –

関連する問題