R绘图积分

Pau*_*.P. 2 plot r integral numerical-integration

我在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
Run Code Online (Sandbox Code Playgroud)

vo应该是一个正弦波,但使用test_vect给我错误的情节和vo直接使用给出错误'x'和'y'长度不同.请问有人可以帮我解决这个问题吗?

李哲源*_*李哲源 5

你已经在那里了.只是用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)
Run Code Online (Sandbox Code Playgroud)

然后让我们比较一下:

sum(abs(v(t) - test_vect(t)))
# [1] 2.136499e-15
Run Code Online (Sandbox Code Playgroud)

他们是一样的!