2017-05-26 19 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)) 

再一次,繪製這與預期的導數一致。

相關問題