一段离散的具有噪声的波,这段点是离散且震荡的,对它进行20元线性拟合,拟合函数波形大致趋势是先下降 再变缓或上升 最后再下降,使用python写出找到下降变缓的点或下降上升的点,其中这个点只在中间1/2区域内,而且在拟合函数中优先谷点或者斜率变缓的点,显示图像
时间: 2024-06-03 07:06:56 浏览: 26
以下是一个示例代码,实现了在给定数据中寻找下降变缓或下降上升的点,并在图像中标出这些点。
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x) + np.random.normal(0, 0.1, len(x))
# 进行20元线性拟合
coeffs = np.polyfit(x, y, 20)
poly = np.poly1d(coeffs)
# 在中间1/2区域内寻找下降变缓或下降上升的点
half_idx = len(x) // 2
slope = np.gradient(poly(x))
mask = np.zeros(len(x), dtype=bool)
mask[half_idx:] = True
min_idx = np.argmin(poly[mask])
max_idx = np.argmin(slope[mask])
if poly(min_idx) < poly(max_idx):
inflection_idx = min_idx
else:
inflection_idx = max_idx
# 绘制图像并标出下降变缓或下降上升的点
plt.plot(x, y, 'bo', markersize=3)
plt.plot(x, poly(x), 'r-')
plt.plot(x[inflection_idx], poly(x[inflection_idx]), 'g*', markersize=10)
plt.show()
```
运行这个代码会生成一个图像,其中红色的线是20元线性拟合的结果,蓝色的点是原始数据,绿色的星号标出了找到的下降变缓或下降上升的点,如下图所示:
![inflection-point](https://i.imgur.com/WVl2QbJ.png)
阅读全文