首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >边缘导数

边缘导数
EN

Code Golf用户
提问于 2016-06-21 21:57:41
回答 6查看 469关注 0票数 9

我最喜欢的近似导数的方法是中心差分,它比正向差分或向后差分更精确,而且我懒得去做更高级的事情。但是,中心的差异需要在您正在评估的点的两边都有一个数据点。通常情况下,这意味着在任何一个端点都没有导数。为了解决这个问题,我想让你切换到边处的正向和后向差:

具体来说,我希望你们对第一点使用前向差分,对最后一点使用向后差分,对中间的所有点使用中心差分。此外,您可以假设x值是均匀间隔的,并且只关注y。

祝你好运,我很期待有人能提出一个简单的规则,在正确的地方复制所有三个衍生产品!

EX投入:

代码语言:javascript
复制
0.034  9.62    8.885   3.477   2.38

我将使用FD、CD和BD来表示在哪个点使用哪一种算法,因此使用以上5点来逼近导数。

代码语言:javascript
复制
FD     CD      CD      CD     BD

然后计算出的值是:

代码语言:javascript
复制
9.586  4.4255 -3.0715 -3.2525 -1.097 

您可以假设始终至少有3个输入点,并且可以使用单精度或双精度进行计算。

和往常一样,最短的答案是赢家。

EN

回答 6

Code Golf用户

发布于 2016-06-22 11:37:10

带有

NumPy的Python,29个字节

代码语言:javascript
复制
import numpy;numpy.gradient

这恰好是NumPy的gradient函数的默认行为。字节被计数为根据这一共识

票数 3
EN

Code Golf用户

发布于 2016-06-22 16:49:46

Julia,8字节

代码语言:javascript
复制
gradient

@MartinEnder的Python答案的启发。在网上试试!

票数 1
EN

Code Golf用户

发布于 2016-06-22 19:41:46

Pyth,14字节

代码语言:javascript
复制
.OM>L2._seB-Vt

在线试用:游行示威

解释:

代码语言:javascript
复制
.OM>L2._seB-VtQQ   implicitly add two Qs (input arrays) at the end
           -VtQQ   get all neighbored differences
        seB        get the last element of ^ and append it to ^
      ._           compute all prefixes
   >L2             reduce all prefixes to the last two elements
.OM                compute the average of each ^
票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/83513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档