Python做曲线拟合(一元多项式拟合及任意函数拟合)

这篇具有很好参考价值的文章主要介绍了Python做曲线拟合(一元多项式拟合及任意函数拟合)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. 一元多项式拟合

使用方法 np.polyfit(x, y, deg)

2. 任意函数拟合

使用 curve_fit() 方法

实例:

(1)初始化 x 和 y 数据集

(2)建立自定义函数

(3)使用自定义的函数生成拟合函数绘图 


1. 一元多项式拟合

使用方法 np.polyfit(x, y, deg)

polyfig 使用的是最小二乘法,用于拟合一元多项式函数。

参数说明: x 就是x坐标,y 就是y坐标,deg 为拟合多项式的次数

实例:

根据 ti yi 两个列表来得到 一元二次多项式拟合函数 (deg为2)

import matplotlib.pyplot as plt
import numpy as np
import pylab as mpl
ti = [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8]
yi = [33.40, 79.50, 122.65, 159.05, 189.15, 214.15, 238.65, 252.2, 267.55, 280.50, 296.65, 301.65, 310.4, 318.15, 325.15]

z1 = np.polyfit(ti, yi, 2)
print(z1)

输出结果:

分别是二次多项式的 3 个系数,y = ax^2 + bx + c

python拟合函数,Python,python,开发语言

2. 任意函数拟合

使用 curve_fit() 方法

curve_fit() 使用是非线性最小二乘法将函数进行拟合,适用范围:多元、任意函数

scipy.optimize.curve_fit(f,xdata,ydata,p0 = None)

常用参数说明:

f: 模型函数f(x,…)。它必须将自变量作为第一个参数,其余你需要求的参数都放后面
xdata: 数组对象,测量数据的自变量。
ydata: 数组对象,因变量。
p0:参数的初始猜测(长度 N),如果为None,则初始值为1(如果可以使用自省来确定函数的参数数量,否则会引发 ValueError)。

 返回值:

popt: 数组,参数的最佳值,以使的平方残差之和最小。f(xdata, *popt) - ydata
pcov: 二维阵列,popt的估计协方差。对角线提供参数估计的方差。

实例:

(1)初始化 x 和 y 数据集

x 为 0~19(包括0和19),y=2x^2 + (二十个0~100范围内的随机数

import numpy as np
x = np.arange(0,20)
y = 2 * x ** 2 + np.random.randint(0, 100, 20)

#z = 2 * x ** 2 + np.random.randint(0, 100, (1,20))[0]

如图为生成 x 列表和 y 列表的值(具有随机性):

python拟合函数,Python,python,开发语言

python拟合函数,Python,python,开发语言

 补充一下 np.random.randint()用法:

numpy.random.randint(low, high=None, size=None, dtype=int)

参数说明:

1. low: int 生成的数值的最小值(包含),默认为0,可省略。
2. high: int 生成的数值的最大值(不包含)
3. size: int or tuple of ints 随机数的尺寸, 默认是返回单个,输入 20 返回 20个,输入 (3,4) 返回的是一个 3*4 的二维数组。(可选)。
4. dtype:想要输出的结果类型。默认值为int。(可选,一般用不上)。

(2)建立自定义函数

 定义函数  y=ax^2

#变量一定要放在第一个位置
def func(x, a):
    return a*x**2

popt, pcov = curve_fit(func, x, y, p0=1) #p0 = 1是因为只有a一参数
print(popt) #即参数a的最佳值
print(pcov)

输出结果:

python拟合函数,Python,python,开发语言

 定义函数 y=2x^2+bx+c

#变量一定要放在第一个位置
def func(x, a, b, c):
    return a*x**2 + b*x + c

popt, pcov = curve_fit(func, x, y) #p0 = 1是因为只有a一参数
print(popt) #即参数a的最佳值
print(pcov)

输出结果:

python拟合函数,Python,python,开发语言

(3)使用自定义的函数生成拟合函数绘图 

对第二个拟合函数绘图:

完整代码:

注意:在画图是可能会出现坐标中文乱码的问题,需要加入以下几行:

import pylab as mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文不显示问题 plt.rcParams['axes.unicode_minus']=False  #解决负数坐标显示问题

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import pylab as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文不显示问题
plt.rcParams['axes.unicode_minus']=False       #解决负数坐标显示问题

x = np.arange(0,20)
y = 2 * x ** 2 + np.random.randint(0, 100, 20)
z = 2 * x ** 2 + np.random.randint(0, 100, (1,20))[0]
print(x)
print(y)

#变量一定要放在第一个位置
def func(x, a, b, c):
    return a*x**2 + b*x + c

popt, pcov = curve_fit(func, x, y) #p0 = 1是因为只有a一参数
print(popt) #即参数a的最佳值
print(pcov)
#popt[0],popt[1],popt[2]分别代表参数a b c
y2 = func(x,popt[0],popt[1],popt[2])

plt.scatter(x, y, marker='x',lw=1,label='原始数据')
plt.plot(x,y2,c='r',label='拟合曲线')
plt.legend() # 显示label
plt.show()

运行结果:

python拟合函数,Python,python,开发语言

 python拟合函数,Python,python,开发语言


 使用指数函数:

y = ae^(bx)

python拟合函数,Python,python,开发语言

绘图效果:

python拟合函数,Python,python,开发语言文章来源地址https://www.toymoban.com/news/detail-786770.html

到了这里,关于Python做曲线拟合(一元多项式拟合及任意函数拟合)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MATLAB polyfit函数——多项式拟合

        此函数用一个n次多项式来拟合一组数据点(x,y),并且将多项式系数以数组p的形式输出,p中的系数按降幂排列,数组长度为 n+1。     如果要将拟合好的多项式系数绘制出来,可以使用polyval函数:     此函数的作用是对给定的x1的值,通过多项式系数数组p计算对应的y1值

    2024年02月16日
    浏览(47)
  • numpy 多项式函数回归与插值拟合模型;ARIMA时间序列模型拟合

    参考: https://blog.csdn.net/mao_hui_fei/article/details/103821601 1、多项式函数回归拟合 x ^3+ x ^2… 2、多项式函数插值拟合 对于插值函数 interp1d(phone_time, phone_x, kind=‘cubic’),无法直接获取多项式的参数与具体函数表达式。这是因为该函数使用样条插值方法,它的内部实现是基于一组数

    2024年02月16日
    浏览(76)
  • 数学建模--多项式拟合方法Python实现

    目录    1.算法设计思路  2.算法核心代码  3.算法效果展示 1.算法设计思路  2.算法核心代码  3.算法效果展示

    2024年02月07日
    浏览(45)
  • 数学建模--非多项式拟合法的Python实现

    目录   1.算法异同区别   2.算法核心步骤   3.算法核心代码   4.算法效果展示 1.算法异同区别   2.算法核心步骤   3.算法核心代码   4.算法效果展示

    2024年02月09日
    浏览(37)
  • 【C 数据结构】 用单链表存储一元多项式,并实现两个多项式相加运算。

    本次代码纯c语言,可以支持输入两个多项式的项式、系数、指数。 实验目的: 1 掌握单链表的基本工作原理; 2 实现链式存储下的两个多项式的相加。 实验步骤 1 定义链式存储的数据结构 2 完成多项式的初始化,即给多项式赋初值 3 完成多项式的输出 4 实现多项式的相加及结

    2024年02月06日
    浏览(48)
  • 一元多项式相加问题(两种方法)

    一元多项式的相加问题,主要运用了线性结构的合并,在合并线性结构的基础上,增加判断,所以我们可以将这个问题理解为一个复杂的线性表合并问题  目录 问题描述 一、顺序表法 1.1 初始化并创建顺序表 1.2 一元多项式相加算法 1.3 完整代码 二、单链表法 1.1 初始化并创

    2024年02月06日
    浏览(52)
  • 【链表应用】| 一元多项式的操作

    专栏推荐:写文章刚刚起步,各个专栏的知识点后续会补充完善,不断更新好文,希望大 家支持一下。 专栏 名字 Elasticsearch专栏 es spring专栏 spring开发 redis专栏 redis学习笔记 项目专栏 项目集锦 修bug专栏 bug修理厂 设有两个一元多项式: p(x)=p0+p1x+p2x2+···+pnxn q(x)=q0+q1x+q2x2+··

    2024年02月06日
    浏览(67)
  • 【数据结构】一元多项式的表示及相加

    📒博客主页: 程序员好冰 🎉欢迎 【点赞👍 关注🔎 收藏⭐️ 留言📝】 📌本文由 程序员好冰 原创,CSDN 首发! 📆入站时间: 🌴2022 年 07 月 13 日🌴 ✉️ 是非不入松风耳,花落花开只读书。 💭推荐书籍:📚《Java编程思想》,📚《Java 核心技术卷》 💬参考在线编程网

    2024年02月11日
    浏览(47)
  • 一元稀疏多项式简单计算器(C语言)含注释

    问题描述 设计一个一元稀疏多项式简单计算器 基本要求 一元稀疏多项式简单计算器的基本功能是: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,……,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; (

    2024年02月08日
    浏览(38)
  • 数据结构(严蔚敏)【一元多项式的运算】【C语言】

    1、一元多项式的运算:实现两个多项式加、减乘运算 设计内容: 用顺序存储结构实现一元多项式的加法、减法和乘法。具体要求为:用五个函数分别实现一元多项式的创建、输出、加法、减法和乘法; 设计思路: 将顺序表数组下标作为多项式的指数项,数组内的数据元素

    2023年04月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包