精华内容
下载资源
问答
  • 主要介绍了详解用Python为直方图绘制拟合曲线的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • python的scipy.optimize包里的curve_fit函数来拟合曲线,当然还可以拟合很多类型的曲线。scipy.optimize提供了函数最小值(标量或多维)、曲线拟合和寻找等式的根的有用算法。import numpy as npimport matplotlib...

    需要对数据进行函数拟合,首先画一下二维散点图,目测一下大概的分布,

    所谓正态分布,就是高斯分布,正态曲线是一种特殊的高斯曲线。

    python的scipy.optimize包里的curve_fit函数来拟合曲线,当然还可以拟合很多类型的曲线。scipy.optimize提供了函数最小值(标量或多维)、曲线拟合和寻找等式的根的有用算法。

    import numpy as np

    import matplotlib.pyplot as plt

    from scipy.optimize import curve_fit

    import math

    #单个高斯模型,如果曲线有多个波峰,可以分段拟合

    def func(x, a,u, sig):

    return a*np.exp(-(x - u) ** 2 / (2 * sig ** 2)) / (sig * math.sqrt(2 * math.pi))

    #混合高斯模型,多个高斯函数相加

    def func3(x, a1, a2, a3, m1, m2, m3, s1, s2, s3):

    return a1 * np.exp(-((x - m1) / s1) ** 2) + a2 * np.exp(-((x - m2) / s2) ** 2) + a3 * np.exp(-((x - m3) / s3) ** 2)

    #正弦函数拟合

    #def fmax(x,a,b,c):

    # return a*np.sin(x*np.pi/6+b)+c

    #fita,fitb=optimize.curve_fit(fmax,x,ymax,[1,1,1])

    #非线性最小二乘法拟合

    #def func(x, a, b,c):

    # return a*np.sqrt(x)*(b*np.square(x)+c)

    #用3次多项式拟合,可推广到n次多项式,数学上可以证明,任意函数都可以表示为多项式形式

    #f1 = np.polyfit(x, y, 3)

    #p1 = np.poly1d(f1)

    #yvals = p1(x) #拟合y值

    #也可使用yvals=np.polyval(f1, x)

    拟合,并对参数进行限制,bounds里面代表参数上下限,p0是初始范围,默认是[1,1,1]

    x=np.arange(1,206,1)

    num = []<-自己的y值

    numhunt = []<-自己的y值

    y = np.array(num)

    yhunt = np.array(numhunt)

    popt, pcov = curve_fit(func3, x, y)

    popthunt, pcovhunt = curve_fit(func, x, yhunt,p0=[2,2,2])

    ahunt = popthunt[0]

    uhunt = popthunt[1]

    sighunt = popthunt[2]

    a1 = popt[0]

    u1 = popt[1]

    sig1 = popt[2]

    a2 = popt[3]

    u2 = popt[4]

    sig2 = popt[5]

    a3 = popt[6]

    u3 = popt[7]

    sig3 = popt[8]

    yvals = func3(x,a1,u1,sig1,a2,u2,sig2,a3,u3,sig3) #拟合y值

    yhuntvals = func(x,ahunt,uhunt,sighunt) #拟合y值

    print(u'系数ahunt:', ahunt)

    print(u'系数uhunt:', uhunt)

    print(u'系数sighunt:', sighunt)

    #绘图

    plot1 = plt.plot(x, y, 's',label='insect original values')

    plot2 = plt.plot(x, yvals, 'r',label='insect polyfit values')

    plot3 = plt.plot(x, yhunt, 's',label='predator original values')

    plot4 = plt.plot(x, yhuntvals, 'g',label='predator polyfit values')

    plt.xlabel('date')

    plt.ylabel('Nightly catches log10(N+1)')

    plt.legend(loc=4) #指定legend的位置右下角

    plt.title('insect/predator')

    plt.show()

    下图是单个和多个高斯拟合图像

    476776-20190602143407490-679657886.png

    下图是多项式拟合图像

    476776-20190602142323373-416848767.png

    图例的位置可以自定义设置

    lower left

    upper center

    lower right

    center

    upper left

    center left

    upper right

    lower center

    best

    center right

    right

    展开全文
  • 使用Python拟合函数曲线需要用到一些第三方库: numpy:科学计算的基础库(例如:矩阵) matplotlib:绘图库 scipy:科学计算库 如果没有安装过这些库,需要在命令行中输入下列代码进行安装: pip install ...

    使用Python拟合函数曲线需要用到一些第三方库:

    • numpy:科学计算的基础库(例如:矩阵)

    • matplotlib:绘图库

    • scipy:科学计算库

    如果没有安装过这些库,需要在命令行中输入下列代码进行安装:

    pip install numpy matplotlib scipy
    

    拟合多项式

    '''
    Author: CloudSir
    Date: 2021-08-01 13:40:50
    LastEditTime: 2021-08-02 09:41:54
    LastEditors: CloudSir
    Description: Python拟合多项式
    https://github.com/cloudsir
    '''
    import matplotlib.pyplot as plt
    import numpy as np
     
    x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    y = [2.83, 9.53, 14.52, 21.57, 38.26, 53.92, 73.15, 101.56, 129.54, 169.75, 207.59]
    z1 = np.polyfit(x, y, 3) #用3次多项式拟合,输出系数从高到0
    p1 = np.poly1d(z1) #使用次数合成多项式
    y_pre = p1(x)
     
    plt.plot(x,y,'.')
    plt.plot(x,y_pre)
    plt.show()
    

    在这里插入图片描述

    函数说明

    np.polyfit(x, y, n)

    功能:拟合曲线

    参数:

    • x,y:x和y的原始数据
    • n:要拟合的次数

    返回值:

    • 一个列表,拟合出的系数,顺序为从高到底

      例: n=3时,会利用 a x 3 + b x 2 + c x + d ax^3+bx^2+cx+d ax3+bx2+cx+d 拟合函数,并返回拟合出的系数 [a, b, c, d]​​​​

    np.poly1d(li, r=False)

    功能:生成多项式函数

    参数:

    • li:

      • 当没有r参数或 r=False 时,传入一个系数列表(次数从高到低),利用该列表生成多项式函数并返回

        import numpy as np

        f = np.poly1d([2, 3, 4])

        “”" f ( x ) = 2 x 2 + 3 x + 4 f(x) = 2x^2+3x+4 f(x)=2x2+3x+4"""

        print(f(2)) # 18

      • 当参数 r=True 时,传入一个根列表,利用该列表生成多项式函数并返回

        import numpy as np

        f = np.poly1d([2, 3, 4], True)

        “”“ f ( x ) = ( x − 2 ) ∗ ( x − 3 ) ∗ ( x − 4 ) f(x) = (x-2)*(x-3)*(x-4) f(x)=(x2)(x3)(x4)​”""

        print(f(0)) # -24

    返回值:

    • 见上

    拟合任意函数

    '''
    Author: CloudSir
    Date: 2021-08-03 15:01:17
    LastEditTime: 2021-08-03 15:26:05
    LastEditors: CloudSir
    Description: Python拟合任意函数
    https://github.com/cloudsir
    '''
    # 引用库函数
    
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy import optimize as op
    
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文
    plt.rcParams['axes.unicode_minus'] = False    # 用来正常显示负号
    
    # 需要拟合的函数
    def f_1(x, A, B, C):
        return A * x**2 + B * x + C
    
    # 需要拟合的数据组
    x_group = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    y_group = [2.83, 9.53, 14.52, 21.57, 38.26, 53.92, 73.15, 101.56, 129.54, 169.75, 207.59]
    
    # 得到返回的A,B值
    A, B, C = op.curve_fit(f_1, x_group, y_group)[0]
    
    # 数据点与原先的进行画图比较
    plt.scatter(x_group, y_group, marker='o',label='真实值')
    x = np.arange(0, 15, 0.01)
    y = A * x**2 + B *x + C
    plt.plot(x, y,color='red',label='拟合曲线')
    plt.legend() # 显示label
    
    plt.show()
    

    在这里插入图片描述

    函数说明

    op.curve_fit(f, x, y)

    功能:拟合任意函数

    参数:

    • f:要拟合的函数类型

      # 构建一个二次函数
      def f(x, A, B, C):
          return A * x**2 + B * x + C
      
      op.curve_fit(f, x, y) # 进行拟合
      
    • x, y:x和y的原始数据

    返回值:一个元组 (popt,pcov)

    • popt是一个一维数组,表示得到的拟合方程的参数。

    • pcov是一个二维数组,是在popt参数下得到的协方差。

    展开全文
  • 主要介绍了Python图像处理之直线和曲线拟合与绘制,结合实例形式分析了Python曲线拟合相关函数curve_fit()的使用技巧,需要的朋友可以参考下
  • 主要介绍了python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • python 绘制拟合曲线并加指定点标识 import os import numpy as np from scipy import log from scipy.optimize import curve_fit import matplotlib.pyplot as plt import math from sklearn.metrics import r2_...
  • python散点图拟合曲线-python曲线拟合

    千次阅读 2020-11-01 12:49:45
    http://blog.sina.com.cn/s/blog_aed5bd1d0102vid7.html1.多项式拟合范例:import matplotlib.pyplot as pltimport numpy as np#潘海东,2014/1/13x = np.arange(1, 17, 1)y = np.array([4.00, 6.40, 8.00, 8.80, ...

    http://blog.sina.com.cn/s/blog_aed5bd1d0102vid7.html

    1.多项式拟合范例:

    import matplotlib.pyplot as plt

    import numpy as np

    #潘海东,2014/1/13

    x = np.arange(1, 17, 1)

    y = np.array([4.00, 6.40, 8.00, 8.80, 9.22, 9.50, 9.70, 9.86, 10.00, 10.20, 10.32, 10.42, 10.50, 10.55, 10.58, 10.60])

    z1 = np.polyfit(x, y, 3)#用3次多项式拟合

    p1 = np.poly1d(z1)

    print(p1) #在屏幕上打印拟合多项式

    yvals=p1(x)#也可以使用yvals=np.polyval(z1,x)

    plot1=plt.plot(x, y, '*',label='original values')

    plot2=plt.plot(x, yvals, 'r',label='polyfit values')

    plt.xlabel('x axis')

    plt.ylabel('y axis')

    plt.legend(loc=4)#指定legend的位置,读者可以自己help它的用法

    plt.title('polyfitting')

    plt.show()

    plt.savefig('p1.png')

    003cvAxDzy6P9leB9wqd6&690

    2.指定函数拟合

    #潘海东,2014/1/13

    #使用非线性最小二乘法拟合

    import matplotlib.pyplot as plt

    from scipy.optimize import curve_fit

    import numpy as np

    #用指数形式来拟合

    x = np.arange(1, 17, 1)

    y = np.array([4.00, 6.40, 8.00, 8.80, 9.22, 9.50, 9.70, 9.86, 10.00, 10.20, 10.32, 10.42, 10.50, 10.55, 10.58, 10.60])

    def func(x,a,b):

    return a*np.exp(b/x)

    popt, pcov = curve_fit(func, x, y)

    a=popt[0]#popt里面是拟合系数,读者可以自己help其用法

    b=popt[1]

    yvals=func(x,a,b)

    plot1=plt.plot(x, y, '*',label='original values')

    plot2=plt.plot(x, yvals, 'r',label='curve_fit values')

    plt.xlabel('x axis')

    plt.ylabel('y axis')

    plt.legend(loc=4)#指定legend的位置,读者可以自己help它的用法

    plt.title('curve_fit')

    plt.show()

    plt.savefig('p2.png')

    003cvAxDzy6P9lesiny1c&690

    展开全文
  • Savitzky-Golay 滤波器实现曲线平滑 #Savitzky-Golay 滤波器实现曲线平滑 # 用于生成问题描述中示例曲线的代码如下: Size = 255 x = np.linspace(0, Size, Size+1) data = g_hist # 可视化图线 # plt.plot(x, data)...

    Savitzky-Golay 滤波器实现曲线平滑

    #Savitzky-Golay 滤波器实现曲线平滑
    # 用于生成问题描述中示例曲线的代码如下:
    Size = 255
    x = np.linspace(0, Size, Size+1)
    data = g_hist
    # 可视化图线
    # plt.plot(x, data)
    # 使用Savitzky-Golay 滤波器后得到平滑图线
    from scipy.signal import savgol_filter
    
    y = savgol_filter(data, 21, 1, mode='nearest') #savgol_filter(x, window_length, polyorder)
    # 可视化图线
    plt.plot(x, data, 'b', label='savgol')
    # plot1 = plt.plot(x, data, '*', label='original values')
    plot2 = plt.plot(x, y, 'r', label='SG polyfit values')
    plt.xlabel('x axis')
    plt.ylabel('y axis')
    plt.legend(loc=1)  # 指定legend的位置,读者可以自己help它的用法
    plt.title('polyfitting')
    plt.show()
    

    参考Savitzky-Golay 滤波器

    结果图

    在这里插入图片描述

    基于Numpy.convolve实现滑动平均滤波

    # 实现数据可视化中的数据平滑
    
    def moving_average(interval, windowsize):
        window = np.ones(int(windowsize)) / float(windowsize)
        re = np.convolve(interval, window, 'same')
        return re
    
    def LabberRing():
        Size = 255
        t = np.linspace(0, Size, Size+1)
        # print('t=', t)
        # np.random.randn 标准正态分布的随机数,np.random.rand 随机样本数值
        y = b_hist
        # print('y=', y)
    
        plt.plot(t, y, 'k')  # plot(横坐标,纵坐标, 颜色)
        y_av = moving_average(y.flatten(), 5)
        plt.plot(t, y_av, 'b')
        plt.xlabel('Time')
        plt.ylabel('Value')
        # plt.grid()网格线设置
        plt.grid(True)
        plt.show()
    
    LabberRing()  # 调用函数
    

    注意画图传入数据需为一维,否则报错:ValueError: object too deep for desired array

    结果图

    windowsize=5

    展开全文
  • w=np.zeros(4)#需要拟合的函数系数 lr=0.01 for i in range(5000): index=np.random.choice(1000,8) x=X[index] y=Y[index] y_pred=w[0]*x**3+w[1]*x**2+w[2]*x+w[3] dy_pred=y_pred-y w[0]=w[0]-lr*np.dot(x**3,dy_...
  • Python曲线拟合

    千次阅读 2020-05-26 10:56:52
    Python曲线拟合 文章首发于我的个人博客 前言 这篇文章的由来:前几天在做大学物理居家实验水滴法测量声速 的时候需要使用phyphox软件导出的数据拟合y=1/(a+b*x)曲线。虽然老师要求使用Origin软件拟合,但是在使用...
  • 利用Python进行曲线拟合

    千次阅读 2020-07-04 18:04:42
    曲线拟合 最小二乘多项式拟合     寻找一个曲线满足y=f(x)y = f(x)y=f(x),线性最小二乘法拟合是解决曲线拟合最常用的方法,基本思路是令 f(x)=a1r1(x)+a2r2(x)+⋯+amrm(x)f(x) = a_1r_1(x)+a_...
  • python拟合指数曲线

    2021-07-16 13:07:27
    I am trying to convert some Matlab code I have for curve fitting my data into python code but am having trouble getting similar answers. The data is:x = array([ 0. , 12.5 , 24.5 , 37.75, 54...
  • python scipy曲线拟合

    千次阅读 2021-11-25 22:16:58
    需要使用曲线拟合,又不想自己从头实现,查找script库实现。 安装: pip install scipy numpy matplotlib 代码实现: import math import numpy as np from scipy import optimize import matplotlib.pyplot ...
  • python曲线拟合

    千次阅读 2018-05-26 19:20:34
    转:...参考http://wiki.klniu.com/wiki/Python/Modules/Scipy。1.多项式拟合范例:import matplotlib.pyplot as pltimport numpy as np#潘海东,2014/1/13x = np.a...
  • 曲线拟合方程python

    2021-04-27 06:21:06
    我试图用一个包含6个元件的rlc电路的导纳方程来拟合数据。我按照给定的he[fit]1re的例子,插入我的方程。该方程是用Mathcad简化的六元件电路导纳的实部。在附图中,x轴是ω(w=2*pi*f),y是以milli Siemens为单位的...
  • 我正在尝试使用python使函数适合一个实验的数据集。我可以得到一个非常好的近似值,拟合效果也很好,但是参数的误差非常高,我不确定如何修正。在数据由时间数据集和y数据集组成。变量“ve”是一个线性速度函数,这...
  • 您错误地调用了curve_fit,下面是用法curve_fit(f, xdata, ydata, p0=None, sigma=None, absolute_sigma=False, check_finite=True, **kw)f是您的函数,它的第一个参数是一组自变量,其后续参数是函数参数(如振幅、...
  • 如果您首先目视检查传递给curve_fit()的数据的...下面是一个类似于@Nikaido提供的图形Python fitter:import numpy, scipy, matplotlibimport matplotlib.pyplot as pltfrom scipy.optimize import curve_fit# the ...
  • python 拟合曲线并求参

    2021-04-27 06:22:16
    python的scipy.optimize包里的curve_fit函数来拟合曲线,当然还可以拟合很多类型的曲线。scipy.optimize提供了函数最小值(标量或多维)、曲线拟合和寻找等式的根的有用算法。import numpy as npimport matplotlib...
  • 贝塞尔曲线拟合多边形,本来以为是很标准的算法,必然有Python的现成库存在,但搜了几天下来,竟然没有一个。 csdn上有一个版本,是基于某篇文章修改的python版本,但算法有错。 该文章的地址在此:...
  • 分享给大家供大家参考,具体如下:这两天学习了用python拟合曲线。一、环境配置本人比较比较懒,所以下载的全部是exe文件来安装,安装按照顺利来安装。自动会找到python的安装路径,一直点下一步就行。还有其他的...
  • 我使用Scipy CurveFit来适应高斯曲线的数据,并且有兴趣分析合适的质量.我知道CurveFit返回一个有用的pcov矩阵,每个拟合参数的标准偏差可以由参数popt [0]计算为sqrt(pcov [0,0]).例如此代码段:import numpy as np...
  • I would like to fit data with integral function(truncated gamma distribution).I tried following code, but errors occur. I am appreciate if you would kind help me. Thank you very much in advance.%matpl...
  • Pythonpython曲线拟合

    万次阅读 2020-03-25 13:57:00
    python作为一款可以简单方便地进行科学计算的语言,进行曲线拟合自然是必备的功能之一了。本文就如何进行曲线拟合进行讲解。 本文需要进行拟合的数据为: x = np.arange(1, 31, 1) y = np.array([20, 23, 26, 29, 32...
  • 有没有办法返回任意函数在其他文件中定义的参数个数?我已经尝试在inspect中使用Signature类,... 上下文:我想使用scipy拟合一些曲线参数,但我不知道每个曲线在用户加载之前将具有多少拟合参数 . 有任何想法吗?谢谢
  • 这是由于连线是根据二维数组的顺序连接的,比如:数组的第一个元素和第二个元素连接了,但这两个元素横坐标不是按照数组元素大小顺序来的。...利用上述语句对数组按照第一列排序,再画图即可正确拟合散点。 ...
  • from scipy import interpolate import matplotlib.pyplot as plt ...绘制拟合曲线图 plt.show() return interpolate.splev(x, tck) print (f(10))   结果:   参考资料: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,951
精华内容 7,980
关键字:

python拟合曲线

python 订阅
友情链接: water_shed.rar