2017-05-26 54 views
1

我知道两个向量x和y,我怎样才能计算y相对于R中的x的导数?通过知道两个数字向量得到一个导数

x<-rnorm(1000) 
y<-x^2+x 

我想计算y关于x:dy/dx的导数;假设我不知道x和y之间的基础函数。在每个x对应的导数刻度中可以有一个值。

+0

如果绘制这些点:'图(X,Y,类型=“L”)'它看起来并不很象一个连续的函数,其中衍生物是有意义的。这真的是你在做什么? – MrFlick

+0

如果你有'y <-rnorm(1000)'和'x < - 1:1000',你可以计算'dy/dx',但在你的情况下你甚至不敢保证有函数。你可以有两个不同的y值,一个函数永远不会有。 –

+0

在第二种情况下,dy/dx < - 2 * x + 1' –

回答

0

要找到导数,请使用数值近似值:(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) 
3

数据唯一的问题是它没有排序。

set.seed(2017) 
x<-rnorm(1000) 
y<-x^2+x 

y = y[order(x)] 
x = sort(x) 
plot(x,y) 

Original function

现在你可以接管X的差异在y差异。

plot(x[-1],diff(y)/diff(x)) 
abline(1,2) 

Derivative

结果与理论结果d基本吻合(X)= 2X + 1

如果你想让你的手放在功能的衍生,只是使用approxfun关于你所有的要点。

deriv = approxfun(x[-1], diff(y)/diff(x)) 

再一次,绘制这与预期的导数一致。

相关问题