精华内容
下载资源
问答
  • Python曲线拟合

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

    文章首发于我的个人博客

    前言

    这篇文章的由来:前几天在做大学物理居家实验水滴法测量声速 的时候需要使用phyphox软件导出的数据拟合y=1/(a+b*x)曲线。虽然老师要求使用Origin软件拟合,但是在使用还是有点用不明白(太懒),所以想用python来拟合。

    使用scipy提供的curve_fit函数

    给出具体的函数形式(任意),用最小二乘法去拟合。可以在func定义要拟合的曲线下面给出具体的代码
    点击下载数据(我把我做大物实验的数据放在这里)

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from scipy.optimize import curve_fit
    
    
    def func(x, a, b):
    	return 1 / (a + b * x)
    
    def compute_voice_speed(a, b):
    	L0 = 0.08
    	L1 = 0.065
    	t1 = 15.48
    	bb = L1 / t1
    	v1 = (4 * L0) / a
    	v2 = (-4 * bb) / b
    
    if __name__ == '__main__':
    	data = './data.xls'
    	df = pd.read_excel(data)
        x = np.array(df[df.columns[0]])
    	y = np.array(df[df.columns[1]])
    
    
    	plt.scatter(x, y)
    	popt, pcov = curve_fit(func, x, y)
    
    	a = popt[0]
    	b = popt[1]
    
    	print('a:{}, b:{}'.format(a, b))
    
    	y_pre = func(x, a, b)
    
    	plt.plot(x, y_pre, 'r')
    
    	compute_voice_speed(a, b)
    
    	plt.show()
    

    曲线拟合结果如下图所示


    多项式拟合

    数学上可以证明,任何函数都可以拟合成多项式函数,这里做一个演示,依旧使用刚刚的数据。

    使用numpy的polyfit函数(最小二乘法逼近)

    numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)
    x:要拟合点的横坐标
    y:要拟合点的纵坐标
    deg:自由度.例如:自由度为2,那么拟合出来的曲线就是二次函数,自由度是3,拟合出来的曲线就是3次函数

    def polyfit_func(x, y):
    	para = np.polyfit(x, y, deg=2)
    	print(para)
    	A, B, C = para[0], para[1], para[2]
    	Y = A * (x**2) + B * x + C
    	plt.plot(x, Y, 'g')
    	plt.show()
    

    曲线拟合结果如下图所示(绿线)

    展开全文
  • python曲线拟合

    千次阅读 2019-08-23 19:29:13
    python曲线拟合: 一个是numpy中的polyfit()函数,多项式拟合,给定变量x、y、多项式次数,返回值为多项式的一维系数array; 另一个是scipy的 optimize 模块中的 curve_fit()函数,可由自己定义拟合函数,更...

    python中曲线拟合:

    一个是numpy中的polyfit()函数,多项式拟合,给定变量x、y、多项式次数,返回值为多项式的一维系数array;

     

    另一个是scipy的 optimize 模块中的 curve_fit()函数,可由自己定义拟合函数,更通用;给定变量x、y、拟合函数,返回值有两个,popt是拟合函数中的一维参数array, pcov为拟合函数中参数的 协方差array ;

     

    二者都是基于最小二乘法;

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    """
    @Email   : todo@todo.todo
    @Software: PyCharm
    @desc    : 
    """
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy import optimize
    
    motor_instruct = [
    0,
    20,
    40,
    60,
    80,
    100,
    120,
    140,
    160,
    180,
    200,
    240,
    280,
    320,
    360,
    400,
    440,
    480,
    520,
    560,
    600,
    640,
    680,
    720,
    760,
    800,
    840,
    880,
    900,
    920,
    940,
    960,
    980,
    1000,
    1020
    ]
    
    angle_40 = [
    0,
    0,
    5.4,
    10.98,
    17.28,
    23.4,
    29.52,
    35.82,
    41.58,
    47.34,
    53.64,
    66.06,
    78.48,
    91.08,
    102.78,
    115.38,
    127.98,
    140.04,
    151.92,
    163.44,
    174.78,
    187.56,
    200.16,
    212.76,
    225,
    238.5,
    252.36,
    265.5,
    272.52,
    279.36,
    286.56,
    292.5,
    298.62,
    304.92,
    306.18
    ]
    
    angle_212_5 = [
    0,
    0,
    4.68,
    10.08,
    15.3,
    20.88,
    27,
    33.3,
    40.14,
    47.52,
    54.54,
    69.84,
    85.14,
    100.44,
    115.56,
    129.96,
    144,
    155.16,
    165.96,
    177.48,
    190.44,
    204.66,
    220.32,
    236.16,
    251.1,
    265.68,
    278.1,
    290.34,
    295.56,
    300.6,
    306,
    311.4,
    316.62,
    321.84,
    322.74
    ]
    
    angle_212_15 = [
    0,
    0,
    5.4,
    11.16,
    16.38,
    21.96,
    27.54,
    33.3,
    39.78,
    46.08,
    52.38,
    67.68,
    83.52,
    98.1,
    112.68,
    126.36,
    138.96,
    150.3,
    161.28,
    172.62,
    184.68,
    198,
    212.76,
    227.88,
    243.54,
    259.38,
    273.6,
    287.82,
    293.4,
    299.16,
    304.92,
    309.96,
    316.26,
    321.48,
    322.56
    ]
    
    
    def poly_fit(x, y, exponential_number=1):
    
        f1 = np.polyfit(x[1:len(x)-1], y[1:len(y)-1],  exponential_number)
        print('f1 is :\n', f1)
        yvals = np.polyval(f1, x[1:len(x)-1])
        print('yvals is :\n', yvals)
    
        # 绘图
        plot1 = plt.plot(x[1:len(x)-1], y[1:len(y)-1], 's', label='original values')
        plot2 = plt.plot(x[1:len(x)-1], yvals, 'r', label='polyfit values')
        plt.xlabel('x')
        plt.ylabel('y')
        plt.legend(loc=4)  # 指定legend的位置右下角
        plt.title('polyfitting')
        plt.show()
    
    
    def fit_function(x, a, b):
        return [a * i + b for i in x ]
    
    
    def curve_fit(x, y):
        popt, pcov = optimize.curve_fit(fit_function, x[1:len(x)-1], y[1:len(y)-1])
        # 获取popt里面是拟合系数
        print "popt >> ", popt
        a = popt[0]
        b = popt[1]
        print "协方差矩阵 pcov >> ", pcov
    
        yvals = fit_function(x[1:len(x) - 1], a, b)
        print('yvals is :\n', yvals)
    
        # 绘图
        plot1 = plt.plot(x[1:len(x) - 1], y[1:len(y) - 1], 's', label='original values')
        plot2 = plt.plot(x[1:len(x) - 1], yvals, 'r', label='polyfit values')
        plt.xlabel('x')
        plt.ylabel('y')
        plt.legend(loc=4)  # 指定legend的位置右下角
        plt.title('curve_fitting')
        plt.show()
    
    
    if __name__=="__main__":
        # poly_fit(motor_instruct, angle_212_15)
        curve_fit(motor_instruct, angle_212_15)

    以上两个函数可达到同样目的,都是对数据进行一次函数拟合;

    展开全文
  • Python 曲线拟合

    2018-08-16 16:06:00
    1 #曲线拟合 2 fig = plt.figure() 3 ax = fig.add_subplot(111)#将画布分割成1行1列,图像画在从左到右从上到下的第1块 4 5 ax.plot(Num,a,label=u'A',color='m',linestyle='',marker='.') 6 ax.plot...
     1 #曲线拟合
     2 fig = plt.figure()
     3 ax = fig.add_subplot(111)#将画布分割成1行1列,图像画在从左到右从上到下的第1块
     4 
     5 ax.plot(Num,a,label=u'A',color='m',linestyle='',marker='.')
     6 ax.plot(Num,b,label=u'B',color='g',linestyle='',marker='.')
     7 #计算多项式
     8 c=np.polyfit(Num,a,100)#拟合多项式的系数存储在数组c中
     9 yy=np.polyval(c,Num)#根据多项式求函数值
    10 c2=np.polyfit(Num,b,100)#拟合多项式的系数存储在数组c中
    11 yy2=np.polyval(c2,Num)#根据多项式求函数值
    12 #进行曲线绘制
    13 x_new=np.linspace(0, 360)
    14 f_liner=np.polyval(c,x_new)
    15 f_liner2=np.polyval(c2,x_new) 
    18 ax.plot(x_new,f_liner,label=u'A',color='g',linestyle='-',marker='')
    19 ax.plot(x_new,f_liner2,label=u'B',color='b',linestyle='-',marker='')
    20 # labels标签设置
    21 ax.set_xlim(0, 366)
    22 ax.set_xlabel(u'T')
    23 ax.set_ylabel(u'Values of A/B')
    24 ax.set_title(u'A/B By T', bbox={'facecolor':'0.8', 'pad':5})
    25 ax.legend()
    26 plt.show()
    27 #

    转载于:https://www.cnblogs.com/Ann21/p/9487920.html

    展开全文
  • 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')

    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')

    展开全文
  • 转一个超级详细的Python曲线拟合详解文章(怕以后找不到了),本栏目初学者不用细看,当手册查就好了。原文在这里:04.04 curve fitting,侵删。导入基础包:In [1]:import numpy as npimport matplotlib as mplimport...
  • 1、多项式拟合范例# _*_coding:utf-8_*___author__ = 'Alex_XT'# Python importsimport matplotlib.pyplot as pltimport numpy as npx = np.arange(1, 17, 1)y = np.array([4.00, 6.40, 8.00, 8.80, 9.22, 9.50, ...
  • 这里的问题是曲线拟合期望你优化的函数取一个输入向量,然后返回一个输出向量。一个输入的高斯函数数字阵列)但不管怎样,它都返回一个标量输出。曲线拟合函数则无法找到良好的最佳拟合。在为了澄清到底发生了什么,...
  • 我是Kepler哎学习,最近在工程中用到曲线拟合。一般我们都是用matlab来做,方便快捷。我们也可以尝试用python编写脚本来拟合数据,方便数据自动化处理。曲线拟合分为一般多项式拟合和指定函数拟合。准备工作:1.建立...
  • 转一个超级详细的Python曲线拟合详解文章(怕以后找不到了),本栏目初学者不用细看,当手册查就好了。原文在这里:04.04 curve fitting,侵删。导入基础包:In [1]:import numpy as np import matplotlib as mpl ...
  • 1.多项式拟合范例: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, 9.22, 9.50, 9.70, 9.86,10.00, 10.20, 10.32, 10.42, ...
  • 【Python】python曲线拟合

    千次阅读 2020-03-25 13:57:00
    python作为一款可以简单方便地进行科学计算的语言,进行曲线拟合自然是必备的功能之一了。本文就如何进行曲线拟合进行讲解。 本文需要进行拟合的数据为: x = np.arange(1, 31, 1) y = np.array([20, 23, 26, 29, 32...
  • I'd like to be able to perform fits that allows me to fit an arbitrary curve function to data, and allows me to set arbitrary bounds on parameters, for example I want to fit function:f(x) = a1(x-a2)^a...
  • 转一个超级详细的Python曲线拟合详解文章(怕以后找不到了),本栏目初学者不用细看,当手册查就好了。原文在这里:04.04 curve fitting,侵删。导入基础包:In [1]:import numpy as np import matplotlib as mpl ...
  • 什么是曲线拟合所谓的曲线拟合,就是使用某一个模型(或者称为方程式),将一系列的数据拟成平滑的曲线,以便观察两组数据之间的内在联系,了解数据之间的变化趋势。曲线拟合的作用在数据分析时,我们有时需要通过已有...
  • 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, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,174
精华内容 469
关键字:

python曲线拟合

python 订阅