Python如何获取点集拟合曲线的函数以计算任意x对应的y值?
获取拟合曲线函数并计算任意x的y值
一、numpy.polyfit() 处理流程
numpy.polyfit() 会返回拟合多项式的系数数组,你可以用 numpy.poly1d() 将这个系数数组转换成一个可直接调用的函数,传入任意x值就能得到对应的y值。
举个实际例子:
import numpy as np # 模拟一组数据点 x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 5, 10, 17, 26]) # 用2次多项式拟合,得到系数 coeffs = np.polyfit(x, y, deg=2) # 将系数转为可调用的多项式函数 poly_func = np.poly1d(coeffs) # 计算任意x对应的y值,比如x=6和x=2.5 y_6 = poly_func(6) y_25 = poly_func(2.5) print(f"x=6时y值:{y_6:.2f}") print(f"x=2.5时y值:{y_25:.2f}")
二、scipy.optimize.curve_fit() 处理流程
curve_fit() 需要你先自定义拟合函数的形式,它返回的是函数的最优参数。拿到参数后,直接把参数代入自定义函数,就能计算任意x的y值。
比如用一个指数函数拟合:
from scipy.optimize import curve_fit import numpy as np # 自定义拟合函数形式(这里是指数函数) def exp_func(x, a, b, c): return a * np.exp(b * x) + c # 模拟数据 x = np.array([0, 1, 2, 3, 4]) y = np.array([2.1, 3.9, 8.2, 16.3, 32.5]) # 拟合得到最优参数popt,pcov是协方差矩阵(这里暂时用不到) popt, pcov = curve_fit(exp_func, x, y) # popt里就是[a, b, c]三个参数 # 用拟合后的函数计算任意x的y值 y_5 = exp_func(5, *popt) y_15 = exp_func(1.5, *popt) print(f"x=5时y值:{y_5:.2f}") print(f"x=1.5时y值:{y_15:.2f}")
总结:
- 用
polyfit时,靠poly1d将系数转成可调用函数; - 用
curve_fit时,把返回的参数代入你自定义的函数即可。
内容的提问来源于stack exchange,提问作者joyoforigami
相关产品推荐
相关产品推荐

