Python使用curve_fit进行直线与曲线拟合实战

周叙
周叙
发布时间:2026-10-11 | 3人浏览过
原创

本文介绍如何使用Python的scipy.optimize模块中的curve_fit函数进行直线、二次及三次曲线的拟合与绘制。通过定义多项式方程,结合numpy和matplotlib,实现散点数据的曲线拟合与可视化展示,适用于任意形式曲线的拟合需求。

核心原理与工具

在Python中进行曲线拟合,主要依赖 scipy.optimize 模块提供的 curve_fit() 函数。该函数能够根据用户定义的数学模型,对给定的数据点进行最优参数估计,从而生成拟合曲线。它支持直线、二次曲线、三次曲线以及高斯曲线等多种形式的拟合。

代码实现步骤

以下是完整的拟合与绘制示例,包含直线、二次和三次曲线的拟合过程:

# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize

# 定义直线方程函数
def f_1(x, A, B):
  return A*x + B

# 定义二次曲线方程
def f_2(x, A, B, C):
  return A*x*x + B*x + C

# 定义三次曲线方程
def f_3(x, A, B, C, D):
  return A*x*x*x + B*x*x + C*x + D

def plot_test():
  plt.figure()
  # 原始数据点
  x0 = [1, 2, 3, 4, 5]
  y0 = [1, 3, 8, 18, 36]
  
  # 绘制原始散点
  plt.scatter(x0[:], y0[:], 25, "red")
  
  # 直线拟合与绘制
  A1, B1 = optimize.curve_fit(f_1, x0, y0)[0]
  x1 = np.arange(0, 6, 0.01)
  y1 = A1*x1 + B1
  plt.plot(x1, y1, "blue")
  
  # 二次曲线拟合与绘制
  A2, B2, C2 = optimize.curve_fit(f_2, x0, y0)[0]
  x2 = np.arange(0, 6, 0.01)
  y2 = A2*x2*x2 + B2*x2 + C2
  plt.plot(x2, y2, "green")
  
  # 三次曲线拟合与绘制
  A3, B3, C3, D3 = optimize.curve_fit(f_3, x0, y0)[0]
  x3 = np.arange(0, 6, 0.01)
  y3 = A3*x3*x3*x3 + B3*x3*x3 + C3*x3 + D3
  plt.plot(x3, y3, "purple")
  
  plt.title("www.jb51.net test")
  plt.xlabel('x')
  plt.ylabel('y')
  plt.show()
  return

plot_test()

高斯曲线拟合示例

对于非多项式曲线,如高斯曲线,需要定义对应的数学模型。以下是一个高斯曲线拟合函数的定义示例:

def f_gauss(x, A, B, C, sigma):
  return A*np.exp(-(x-B)**2/(2*sigma**2)) + C

总结

通过定义合适的曲线方程,curve_fit() 可以灵活地应用于各种形式的曲线拟合任务。结合 numpy 和 matplotlib,可以轻松实现数据的可视化展示。以上就是Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】的详细内容,更多关于Python曲线拟合的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表