【问题标题】:get a derivative by knowing two numeric vectors通过知道两个数值向量得到一个导数
【发布时间】:2017-05-26 22:18:49
【问题描述】:

我知道两个向量 x 和 y,如何计算 y 对 R 中 x 的导数?

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

我想计算 y 对 x 的导数:dy/dx;假设我不知道 x 和 y 之间的底层函数。可以有一个对应于每个 x 的导数尺度值。

【问题讨论】:

  • 如果您绘制这些点:plot(x,y, type="l") 它看起来不像是导数有意义的连续函数。这真的是你在做什么吗?
  • 如果你有y&lt;-rnorm(1000)x &lt;- 1:1000,你可以计算dy/dx,但在你的情况下,你甚至不能保证有一个函数。你可以有两个不同 y 的 x 值,这是一个函数永远不可能拥有的。
  • 在你的第二种情况下dy/dx &lt;- 2*x + 1
  • @MikeWise,但这只是一个例子,在我手头的问题中,我不知道链接 x 和 y 的底层函数,但只有两个数字向量。
  • 你还需要假设函数形式是什么。就像来自线性函数、多项式或什么的空间。否则你的“最合适”的问题将没有解决方案。

标签: r derivative


【解决方案1】:

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

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))

再一次,绘制此图与预期导数非常吻合。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-10-30
      • 1970-01-01
      • 2016-01-29
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 2013-11-07
      • 1970-01-01
      相关资源
      最近更新 更多