在1d内找到给定间隔内的所有根

时间:2017-07-18 18:10:19

标签: python scipy numerical-methods

为了补充提出的问题here,我想问一下如何在某个时间间隔内找到所有根,直到某种粒度。现在我用穷人的方法找到根源

import numpy as np
x = np.linspace(0,10,1000)
data = np.sin(x)
roots = (np.abs(data) < 0.1)
# Cluster the data using some other poor man's approach

2 个答案:

答案 0 :(得分:1)

显而易见的是,如果没有关于手头功能的任何信息,那么穷人的方法就是最优的(在某种概率意义上)。

因为一般函数的根源是均匀且相互独立的,所以不一致的步骤(可能基于函数值)会浪费时间。

当你可以利用函数的某些属性时,你处于更好的位置。例如,如果您对区间中的导数有一个约束,那么对于端点处函数的合适值,您可以显示没有根可以存在。

答案 1 :(得分:0)

我认为没有一种神奇的方法可以找到一般方程的所有根。你的“穷人的方法”开始并不是太糟糕。我会使用产品而不是|data|<eps。例如,

dp = data[1:] * data[:-1]
indices = np.where(dp <= 0)

将提供“可疑”间隔的位置。然后你可以运行一个更好的方法,提供每个这样的可疑区间的中心坐标作为初始猜测。一种更复杂的方法可能会适应斜率并调整函数采样,而不是像linspace()那样使用常量方法。