通过知道两个数值向量得到导数
get a derivative by knowing two numeric vectors
我知道两个向量 x 和 y,如何计算 R 中 y 对 x 的导数?
x<-rnorm(1000)
y<-x^2+x
我想计算 y 关于 x 的导数:dy/dx;假设我不知道 x 和 y 之间的底层函数。可以有一个对应于每个x的微分尺度的值。
您的数据唯一的问题是它没有排序。
set.seed(2017)
x<-rnorm(1000)
y<-x^2+x
y = y[order(x)]
x = sort(x)
plot(x,y)
现在您可以用 y 差值代替 x 差值。
plot(x[-1],diff(y)/diff(x))
abline(1,2)
结果与理论结果吻合得很好 d(x) = 2x+1
如果你想得到导数的函数,只需在你拥有的所有点上使用approxfun
。
deriv = approxfun(x[-1], diff(y)/diff(x))
再一次,绘制这与预期的导数非常吻合。
要求导数,请使用数值近似值:(y2-y1)/(x2-x1) 或 dy/dx。在 R 中使用 diff 函数计算 2 个连续点之间的差异:
x<-rnorm(100)
y<-x^2+x
#find the average x between 2 points
avex<-x[-1]-diff(x)/2
#find the numerical approximation
#delta-y/delta-x
dydx<-diff(y)/diff(x)
#plot numeric approxiamtion
plot(x=avex, dydx)
#plot analytical answer
lines(x=avex, y=2*avex+1)
我知道两个向量 x 和 y,如何计算 R 中 y 对 x 的导数?
x<-rnorm(1000)
y<-x^2+x
我想计算 y 关于 x 的导数:dy/dx;假设我不知道 x 和 y 之间的底层函数。可以有一个对应于每个x的微分尺度的值。
您的数据唯一的问题是它没有排序。
set.seed(2017)
x<-rnorm(1000)
y<-x^2+x
y = y[order(x)]
x = sort(x)
plot(x,y)
现在您可以用 y 差值代替 x 差值。
plot(x[-1],diff(y)/diff(x))
abline(1,2)
结果与理论结果吻合得很好 d(x) = 2x+1
如果你想得到导数的函数,只需在你拥有的所有点上使用approxfun
。
deriv = approxfun(x[-1], diff(y)/diff(x))
再一次,绘制这与预期的导数非常吻合。
要求导数,请使用数值近似值:(y2-y1)/(x2-x1) 或 dy/dx。在 R 中使用 diff 函数计算 2 个连续点之间的差异:
x<-rnorm(100)
y<-x^2+x
#find the average x between 2 points
avex<-x[-1]-diff(x)/2
#find the numerical approximation
#delta-y/delta-x
dydx<-diff(y)/diff(x)
#plot numeric approxiamtion
plot(x=avex, dydx)
#plot analytical answer
lines(x=avex, y=2*avex+1)