R绘图积分

R plotting integral

我在使用 R 中的积分函数时遇到了一些问题。我正在尝试绘制积分 vo,但似乎我做的不正确。

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' 长度不同 。谁能帮我解决这个问题?

你已经到了。只需使用 plot(t, test_vect(t))。您不能使用 vo,因为 integrate 不是矢量化函数。评估像vo(0.002)这样的单个点是没有问题的,但是你不能用vo(t)给它一个向量。这就是为什么我们要 Vectorize(vo)(t).

你说test_vect没有给出正确的情节。当然?我们可以解析计算积分:

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

那我们来比较一下:

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

他们是一样的!