Python使用curve_fit进行直线与曲线拟合实战
本文介绍如何使用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曲线拟合的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









