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
0
投稿
猜你喜欢
- 如需安装运行环境或远程调试,可加QQ905733049, 或QQ2945218359由专业技术人员远程协助!运行结果如下:代码如下:impo
- pandas可以对不同索引的对象进行算术运算,如果存在不同的索引对,结果的索引就是该索引对的并集。一、算术运算a、series的加法运算 &
- 1、冒泡排序法让列表中的一项和下一项作比较,若前一项大于后一项则交换两者位置(升序)。方法一:直接使用for循环L=[8,2,50,3]fo
- pyecharts介绍pyecharts是python与echarts链接,一个用于生成Echarts图标的第三方库,pyecharts分为
- 有时候会需要通过从保存下来的ckpt文件来观察其保存下来的训练完成的变量值。ckpt文件名列表:(一般是三个文件)xxxxx.ckpt.da
- 我们可以利用 Cookie collection 来刪除客户端的Cookies: <%
- 随着手机用户的不断增加,WAP站点如雨后春笋迅速的滋长开来,手机邮箱也不断的出现在人的眼前,笔者也曾经开发了一套手机邮箱的系统,但由于时间仓
- 导语三月疫情原因,很多地方都封闭式管理了!在回家无聊的打酱油,小编今天给大伙带来了一波小游戏——全民
- 事件的概念事件:指的是文档或者浏览器窗口中发生的一些特定交互瞬间。我们可以通过 * (或者处理程序)来预定事件,以便事件发生的时候执行相应的
- 正在看的ORACLE教程是:Oracle数据库集复制方法浅议。前言 日益增长的分布式应用需求要求实现更好分布式的软件环境,不断推动着分布式技
- 一、安装go get github.com/sirupsen/logrus二、使用1、当做标准库使用logrus实现了标准库log的方法,可
- 1. 安装Pyechartspip install pyecharts2. 图表基础2.1 主题风格添加主题风格使用的是 InitOpts(
- 在用户体验这个行业,经常会听到,可用性,可访问性这样专业的名词,但是,事实上在很多产品实现过程里都忽略了这一点!WHY?举个很简单的例子,用
- 目录1.准备工作2. 开始2.1 生成控件2.2 定义输入和计算函数2.3 绑定键盘事件2.4 循环3.全部代码4. 结束语做一个计算器,这
- 导航是网页设计的重点,我们在设计一个网站的时候,常常从导航入手,不夸张的说,导航的设计甚至决定了整个网站的风格。这就需要我们平常多留心收集优
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 19 - TooltipsMootools 1.2
- 等值线图的Python绘制方法等值线图或等高线图在科学界经常用到,它是由一些封闭的曲线组成的,来表示三维结构表面。虽然看起来复杂,其实用ma
- Expression定义 IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javascript表达式关联起来,这
- 公司后端服务使用 java 重构后,很多接口采用了阿里的 dubbo 协议。而 python 是无法直接调用 dubbo 接口的,但可以通过
- Django在做url设置时,如果有两个APP,那么再import时会出错解决的方法有两种:方法一:在每个APP里设置单独的url.py文件