Python 3.x 水平线与函数的交点
我有这段代码,生成以下(图像),我将如何继续检测线与函数的交点`Python 3.x 水平线与函数的交点,python-3.x,math,signal-processing,Python 3.x,Math,Signal Processing,我有这段代码,生成以下(图像),我将如何继续检测线与函数的交点` 可以使用以下表达式获取最接近交点的数组t的索引 idx=np.argwhere(np.diff(np.sign(y-func))).flant() 此表达式选择列表中有符号更改的索引。但是,这只是实际交点的近似值。减小t的步长以提高精度 由于方程相对简单,另一种方法是手工求解,并使用封闭式公式进行绘图 方程是y=0.4和y=sin(2*pi*t*f/Fs)。交点的值为t,因此0.4=sin(2*pi*t*f/Fs)。求解t给出
可以使用以下表达式获取最接近交点的数组
t
的索引
idx=np.argwhere(np.diff(np.sign(y-func))).flant()
此表达式选择列表中有符号更改的索引。但是,这只是实际交点的近似值。减小t
的步长以提高精度
由于方程相对简单,另一种方法是手工求解,并使用封闭式公式进行绘图 方程是
y=0.4
和y=sin(2*pi*t*f/Fs)
。交点的值为t
,因此0.4=sin(2*pi*t*f/Fs)
。求解t
给出了两个答案:
t=(arcin(0.4)+2*pi*k)/(2*pi*f/Fs)
t=(pi-arcin(0.4)+2*pi*k)/(2*pi*f/Fs)
其中
k
是任意整数。简而言之,循环给定范围内的所有所需整数,并使用上述两个方程计算坐标t
。您将获得一组点(t,0.4)
,可以在图形上绘制。这与找到func(t)-y=0的解的问题完全相同。对于这里给出的函数,解是周期性的。
import numpy as np
import matplotlib.pyplot as plt
y = 0.4*np.ones(100)
x = np.arange(0, 100)
t = np.linspace(0,100,100)
Fs = 6000
f = 200
func = np.sin(2 * np.pi * f * t / Fs)
idx = np.where(func == y) # how i think i should do to detect intersections
print(idx)
plt.plot(x, y) # the horizontal line
plt.plot(t,func) # the function
plt.show()