Python 在1d中查找给定间隔内的所有根

Python 在1d中查找给定间隔内的所有根,python,scipy,numerical-methods,Python,Scipy,Numerical Methods,为了补充提出的问题,我想问一下如何在一定的时间间隔内找到所有根,直到某种粒度。现在我用穷人的方法,通过 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 将numpy导入为np x=np.linspace(0,101000) 数据=np.sin(

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

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
将numpy导入为np
x=np.linspace(0,101000)
数据=np.sin(x)
根=(np.abs(数据)<0.1)
#使用其他穷人的方法对数据进行聚类

我认为没有神奇的方法可以找到一般方程的所有根。你的“穷人的方法”一开始还不错。我会使用产品而不是
| data |。显然,如果没有任何关于手头函数的信息,穷人的方法是最优的(在某种概率意义上)

因为一般函数的根是均匀且相互独立地分布的,因此可能基于函数值的不等步长将是浪费时间


当您可以利用函数的某些属性时,您处于更好的位置。例如,如果在一个区间内对导数有一个界,那么对于端点处函数的合适值,可以证明不存在根。

根=(np.abs(data)
做什么?“粒度”的含义是什么?也就是说,它代表什么?好的,现在从上次编辑开始就清楚了。谢谢你能在寻找根时评估函数吗?或者你只有采样数据吗?你知道所有根都是实的吗?如果是复数共轭对,你会错过很多。@Jon,我只需要真正的根。@kazemakase:我有一个性能良好的函数,可以在任意间隔上进行采样。
dp = data[1:] * data[:-1]
indices = np.where(dp <= 0)