如何使用Numpy对Python数组做二阶polyfit并求拟合多项式的最大值
Numpy二阶多项式拟合并求最大值实现方法
完整实现代码
import numpy as np # 输入采样点数组 y = np.array([0.04625943, 0.04646331, 0.04636401, 0.04636489, 0.04651253, 0.0462647 , 0.04549576, 0.04484105, 0.04463366], dtype=np.float32) # 构造x轴坐标,默认取采样点的索引0~8,有自定义x采样值可直接替换该行 x = np.arange(len(y)) # 二阶多项式拟合,返回系数顺序为二次项、一次项、常数项,对应多项式y = a*x² + b*x + c coeff = np.polyfit(x, y, 2) a, b, c = coeff # 二阶多项式顶点x坐标为固定解析解x0=-b/(2a),采样点先升后降拟合的a为负,开口向下,该点为最大值点 x0 = -b / (2 * a) # 计算最大值 max_value = np.polyval(coeff, x0) # 可选逻辑:要求最大值仅在采样区间[0, 8]内取值时,增加如下区间判断 if x0 < 0 or x0 > len(y)-1: max_value = max(np.polyval(coeff, 0), np.polyval(coeff, len(y)-1)) print(f"拟合二阶多项式:y = {a:.6f}x² + {b:.6f}x + {c:.6f}") print(f"最大值点x坐标:{x0:.2f},最大值:{max_value:.6f}")
代码说明
- 若有自定义的x轴采样坐标,直接替换
x = np.arange(len(y))即可 - 采用二阶多项式的解析顶点公式计算最大值,无需遍历采样点,计算效率更高
- 可选的区间判断逻辑可避免极值点落在采样范围外时,得到不符合预期的结果
内容的提问来源于stack exchange,提问作者GNZ
相关产品推荐
相关产品推荐

