首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >构造与函数或其他数组成比例的数组间距

构造与函数或其他数组成比例的数组间距
EN

Stack Overflow用户
提问于 2015-03-09 07:47:24
回答 3查看 316关注 0票数 5

我有一个函数(f:黑线),它在一个特定的小区域(导数f':蓝线和二阶导数f'':红线)变化很大。我想在数值上集成这个函数,如果我均匀地分布点(在日志空间中),那么在急剧变化的区域(在图中的2E15附近),我会得到相当大的误差。

如何构造阵列间距,以便在二阶导数较大的区域(即与二阶导数成比例的采样频率)进行很好的采样?

我碰巧在使用python,但我对一个通用算法感兴趣。

编辑:

1)仍然能够控制采样点的数量(至少是粗略的),这将是很好的。

2)我考虑过构造一个概率分布函数,形状类似于二阶导数,并从它随机抽取--但我认为这会带来很差的收敛性,而且总的来说,这似乎是一种更确定的方法是可行的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-09 07:56:33

假设f''NumPy array,您可以执行以下操作

代码语言:javascript
运行
AI代码解释
复制
# Scale these deltas as you see fit
deltas = 1/f''
domain = deltas.cumsum()

只考虑数量级波动,这可以调整如下.

代码语言:javascript
运行
AI代码解释
复制
deltas = 1/(-np.log10(1/f''))
票数 2
EN

Stack Overflow用户

发布于 2015-03-09 14:30:43

1)酷法

目前,我实现了一种“自适应细化”方法受流体力学技术的启发。我有一个函数,我想要采样,f,我选择一些初始数组的样本点x_i。我构造了一个“抽样”函数g,它决定在哪里插入新的样本点。

在本例中,我选择g作为log(f)的斜率--因为我希望解析日志空间中的快速更改。然后,我将g的范围划分为L=3细化级别。如果g(x_i)超过了细化级别,则将span细分为N=2片段,将这些细分添加到样本中,并根据下一个级别进行检查。这会产生这样的结果:

实心灰色线是我想要采样的函数,而黑色十字是我的初始取样点。

虚线灰色线是我函数的日志的导数。

彩色虚线行是我的“细化级别”

彩色杂交是我精良的取样点。

所有这些都显示在日志空间中。

2)简单方法

在完成(1)之后,我意识到我可能只需要在y中选择一个最大间距,然后选择x-spacings来实现。同样,只需在y中均匀地划分函数,并找到相应的x点.其结果如下:

票数 0
EN

Stack Overflow用户

发布于 2015-03-09 21:20:06

一个简单的方法是将x轴数组分成三个部分,并对每个部分使用不同的间距。它将允许您保持总点数和所需的间距在不同的地区的地块。例如:

代码语言:javascript
运行
AI代码解释
复制
x = np.linspace(10**13, 10**15, 100)
x = np.append(x, np.linspace(10**15, 10**16, 100))
x = np.append(x, np.linspace(10**16, 10**18, 100))

您可能希望根据您的数据选择一个更好的间隔,但是您知道了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28946183

复制
相关文章

相似问题

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