2016-09-15 12 views
2

Rの積分関数にいくつかの問題があります。私は積分ボロをプロットしようとしていますが、正しく行っていないようです。Rプロット積分

t <- seq(0, 0.04, 0.0001) 
vi <- function(x) {5 * sin(2 * pi * 50 * x)} 
vo <- function(x) {integrate(vi, lower=0, upper=x)$value} 

test_vect = Vectorize(vo, vectorize.args='x') 
plot(t, vo(t)) # should be a cosine wave 
plot(t, vi(t)) # sine wave 

voは正弦波であるが、test_vectを使用して私に間違ったプロットを与え、voを使用して直接エラー「x」及び「y」の長さがを異なる与えるべきです。誰でも、この問題について私を助けてくれますか?

答えて

5

あなたは既にあります。ちょうどplot(t, test_vect(t))を使用してください。 integrateはベクトル化された関数ではないため、voは使用できません。 vo(0.002)のように単一の点を評価するのに問題はありませんが、vo(t)でベクトルを供給することはできません。これが私たちがほしい理由ですVectorize(vo)(t)

enter image description here

あなたはtest_vectは、右のプロットを与えていないことを言いました。確かに?私たちは、解析的に積分を計算することができます

v <- function (x) (1-cos(100*pi*x))/(20*pi) 

その後のは、比較してみましょう:

sum(abs(v(t) - test_vect(t))) 
# [1] 2.136499e-15 

は、彼らは同じです!

+0

あなたは本当に正しいです。答えをありがとうございました。 –

関連する問題