Python曲线拟合详解
作者:微小冷 发布时间:2023-12-29 05:54:50
标签:Python,曲线拟合
入门
scipy.optimize
中,curve_fit
函数可调用非线性最小二乘法进行函数拟合,例如,现在有一个高斯函数想要被拟合
则调用方法如下
import numpy as np
from scipy.optimize import curve_fit
def gauss(x, a, b, c):
return a*np.exp(-(x-b)**2/c**2)
x = np.arange(100)/10
y = gauss(x, 2, 5, 3) + np.random.rand(100)/10
# 非线性拟合 abc为参数;para为拟合评价
abc, para = curve_fit(gauss, x, y)
print(abc)
# [2.03042233 5.01182397 3.10994351]
其中,curve_fit
在调用时输入了三个参数,分别是拟合函数、自变量、因变量。返回值abc
和para
分别为拟合参数和拟合的协方差,最终得到abc
的值与预设的2,0.5, 3
是比较接近的,其拟合效果可以画图查看一下
import matplotlib.pyplot as plt
plt.scatter(x, y, marker='.')
Y = gauss(x, *abc)
plt.plot(x, Y, lw=1)
plt.show()
效果如下
参数
curve_fit
的装形式如下
curve_fit(f, xdata, ydata, p0=None, sigma=None, absolute_sigma=False, check_finite=True, bounds=(-inf, inf), method=None, jac=None, *, full_output=False, **kwargs)
除了f, xdata, ydata
已经用过之外,其他参数的含义为
p0
拟合参数初始值sigma
相对精度要求absolute_sigma
绝对精度要求check_finite
有限性检测开关bounds
拟合范围method
拟合方法,可选‘lm’, ‘trf’, ‘dogbox’,与least_squares函数中定义相同jac
雅可比矩阵,与least_squares中定义相同
最小二乘函数:least_squares
多元拟合
尽管curve_fit
的参数列表中,只给出了xdata, ydata
作为拟合参数,而xdata
只有一组,但curve_fit
是具备多元拟合潜力的。
唯一需要注意的是,当多元拟合函数的返回值必须为一维数组,示例如下
# 创建一个函数模型用来生成数据
def func1(x, a, b, c, d):
r = a * np.exp(-((x[0] - b) ** 2 + (x[1] - d) ** 2) / (2 * c ** 2))
return r.ravel()
# 生成原始数据
xx = np.indices([10, 10])
z = func1(xx, 10, 5, 2, 5) + np.random.normal(size=100)/100
abcd, para = curve_fit(func1, xx, z)
print(abcd)
# [10.00258587 5.00146314 1.99952885 5.00138184]
可以发现拟合结果与预设的abcd
还是比较接近的,下面绘制三维图像来更加直观地查看一下
z = z.reshape(10, 10)
Z = func1(xx, *abcd).reshape(10,10)
ax = plt.subplot(projection='3d')
ax.scatter3D(xx[0], xx[1], z, color='red')
ax.plot_surface(xx[0], xx[1], Z, cmap='rainbow')
plt.show()
结果如下
来源:https://tinycool.blog.csdn.net/article/details/130109777


猜你喜欢
- 一、前言今天我们将用Python来创建一个属于自己的音乐播放器。为此,我们将使用三个软件包:Tkinter:用于UIPygame:播放音乐o
- 1.创建tfrecordtfrecord支持写入三种格式的数据:string,int64,float32,以列表的形式分别通过tf.trai
- 问题描述在电脑中重新安装Anaconda3&PyCharm后,运行原来的程序画图时出现了下图界面。不能弹出如下图所示的“figure”窗口。
- 前情提要上文我们分析了挂载组件主要调用了三个函数: createComponentInstance(创建组件实例)、setupCompone
- GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利
- 大家在安装程序或下载文件时,通常都能看到进度条,提示你当前任务的进度。其实,在python中实现这个功能很简单,下面是具体代码。在实际应用中
- 之前的博客里使用tf读取数据都是每次fetch一条记录,实际上大部分时候需要fetch到一个batch的小批量数据,在tf中这一操作的明显变
- 解决window.open后返回object的错误 <a href="javascript:void(window.open
- python永久添加搜索路径_Python sys.path永久添加在用户目录下,找到隐藏文件.bashrc 文件然后在末尾添加export
- 1、引言在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor。本文记录了确定gsExtra
- Pycharm是当前进行python开发,尤其是Django开发最好的IDE。GitHub是程序员的圣地,几乎人人都在用。本文假设你对pyc
- 在实际信息系统开发中,经常会用到各种各样的协议,网络协议常用的有http,tcp,udp等,传输数
- 误区 #5: AWE在64位SQL SERVER中必须开启错误! 在坊间流传的有关AWE的设置的各种版本
- 我用的是mac mini然后在上边装好了sublime text2 插件依然是go sublime和go build这两个就不介绍了,因为之
- 1、汉语分词的由来使用ASP开发的中小企业的网站,对于站内搜索,往往只是简单的通过SQL语句匹配数据库。对于比较短的词语搜索,这个方法是有效
- 配置连接数据库DATABASES = { 'default': { 'ENGI
- 今天下午,低一度博客受到攻击了,出现了大约一个小时的访问异常。庆幸的是,这帮无耻歹徒没能成功获取我的Access数据库,而只是象征性地给我注
- Python 语言里有许多(而且是越来越多)的高级特性,是 Python 发烧友们非常喜欢的。在这些人的眼里,能够写出那些一般开发者看不懂的
- 背景最近在一次线上作业过程中执行了一句DML语句,本以为万无一失,结果应用反馈说没有更新,数据还是没有变,最后经过排查才发现是我语句写错了,
- 本文实例讲述了Python自定义装饰器原理与用法。分享给大家供大家参考,具体如下:什么是装饰器?装饰器本质是一个函数,它可以在不改变原来的函