精华内容
下载资源
问答
  • 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...

    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.

    %matplotlib inline

    import numpy as np

    from scipy import integrate

    import scipy.optimize

    import matplotlib.pyplot as plt

    xlist=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14]

    ylist=[1.0, 0.7028985507246377, 0.4782608695652174, 0.36231884057971014,

    0.2536231884057971, 0.1811594202898551, 0.12318840579710147,

    0.08695652173913046, 0.057971014492753645, 0.04347826086956524,

    0.02173913043478263, 0.007246376811594223]

    xdata=np.array(xlist)

    ydata=np.array(ylist)

    parameter_initial=np.array([0.0,0.0,0.0])#a,b,c

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

    return integrate.quad(lambda t:t^(a-1)*np.exp(-t),x/c,b/c)/integrate.quad(lambda t:t^(a-1)*np.exp(-t),0.0,b/c)

    parameter_optimal,cov=scipy.optimize.curve_fit(func,xdata,ydata,p0=parameter_initial)

    print "paramater =", paramater_optimal

    y = func(xdata,paramater_optimal[0],paramater_optimal[1],paramater_optimal[2])

    plt.plot(xdata, ydata, 'o')

    plt.plot(xdata, y, '-')

    plt.show()

    Following errors occur.

    ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

    解决方案

    Your code has the following errors:

    The initial values are inadequate since being zeroes, and in the functions divided between that parameter causing problems because the division between 0 is undefined.

    The quad() function receives as a second and third parameter a numeric data, not a list, nor a np.ndarray() to some iterable, but in your case the parameter x in your function fun() is an np.ndarray(), What you do is iterate over x and pass that parameter to quad().

    quad() returns 2 parameters, the first is the value of the integral and the second is the error, so only the first parameter should be used.

    You must use ** instead of ^.

    Considering the above, I propose the following code:

    import numpy as np

    from scipy import integrate

    import scipy.optimize

    import matplotlib.pyplot as plt

    xlist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14]

    ylist = [1.0, 0.7028985507246377, 0.4782608695652174, 0.36231884057971014,

    0.2536231884057971, 0.1811594202898551, 0.12318840579710147,

    0.08695652173913046, 0.057971014492753645, 0.04347826086956524,

    0.02173913043478263, 0.007246376811594223]

    xdata = np.array(xlist)

    ydata = np.array(ylist)

    parameter_initial = np.array([2.5,2.5,2.5]) # a, b, c

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

    fn = lambda t : t**(a-1)*np.exp(-t)

    den = integrate.quad(fn, 0.0, b/c)[0]

    num = np.asarray([integrate.quad(fn, _x/c, b/c)[0] for _x in x])

    return num/den

    parameter_optimal, cov = scipy.optimize.curve_fit(func, xdata, ydata,p0=parameter_initial)

    print("paramater =", parameter_optimal)

    y = func(xdata, *parameter_optimal)

    plt.plot(xdata, ydata, 'o')

    plt.plot(xdata, y, '-')

    plt.show()

    展开全文
  • /usr/bin/python # -*- coding:utf-8 -*- # @Author: DingQinbin # @Time : 2020/10/20 14:11 import pylab import numpy as np import sys, os from scipy.optimize import curve_fit def func(x, a, b, c): ...

    1ee36ba99cf34426808cf0bbd40da9fb.png
    #!/usr/bin/python
    # -*- coding:utf-8 -*-
    # @Author: DingQinbin
    # @Time  : 2020/10/20 14:11
    
    import pylab
    import numpy as np
    import sys, os
    from scipy.optimize import curve_fit
    
    def func(x, a, b, c):
        return b * np.power(a, x) + c
    
    if __name__ == "__main__":
        x = np.arange(1, 31, 1)
        y = np.array(
            [20, 23, 26, 29, 32, 35, 38, 45, 53, 62, 73, 86, 101, 118, 138, 161, 188, 220, 257, 300, 350, 409, 478, 558,
             651, 760, 887, 1035, 1208, 1410])
        # z1 = np.polyfit(x, y, 3)
        # p1 = np.poly1d(z1)
        # print(z1)
        # y_pred = p1(x)
        # # print(np.polyval(p1, 29))
        # # print(np.polyval(z1, 29))
    
        popt, pcov = curve_fit(func, x, y)
        y_pred = [func(i, popt[0], popt[1], popt[2]) for i in x]
        print(popt)
        print(popt)
    
        plot1 = pylab.plot(x, y, '*', label='original values')
        plot2 = pylab.plot(x, y_pred, 'r', label='fit values')
        pylab.title('')
        pylab.xlabel('')
        pylab.ylabel('')
        pylab.legend(loc=3, borderaxespad=0.,  bbox_to_anchor=(0, 0))
        pylab.show()
        pylab.savefig('p1.png', dpi=200, bbox_inches='tight')

    19fdeae1efe047e5868ee685122aedda.png
    展开全文
  • 我是Kepler哎学习,最近在工程中用到曲线拟合。一般我们都是用matlab来做,方便快捷。我们也可以尝试用python编写脚本来拟合数据,方便数据自动化处理。曲线拟合分为一般多项式拟合和指定函数拟合。准备工作:1.建立...

    大家好?我是Kepler哎学习,最近在工程中用到曲线拟合。一般我们都是用matlab来做,方便快捷。我们也可以尝试用python编写脚本来拟合数据,方便数据自动化处理。

    曲线拟合分为一般多项式拟合和指定函数拟合。4aa545dccf7de8d4a93c2b2b8e3265ac0a26d216.png

    准备工作:

    1.建立python环境(https://www.jianshu.com/p/daf5d33ae62e)

    2.安装模块numpy、matplotlib、scipy(自行百度)4aa545dccf7de8d4a93c2b2b8e3265ac0a26d216.png

    代码编写:

    多项式拟合

    1.创建文件mult.py

    import numpy as np      # 导入模块

    from sys import argv

    import matplotlib.pyplot as plt

    script,x_data,y_data,order = argv    # 参数变量

    x_data = x_data.split(",")        # 将字符串拆分成字符列表

    x_data = [float(i) for i in x_data] # 将字符列表转换为数字列表

    y_data = y_data.split(",")

    y_data = [float(i) for i in y_data]

    x = np.array(x_data)

    print("x is: \n",x)

    y = np.array(y_data)

    print("y is:\n",y)

    f1 = np.polyfit(x,y,int(order))    #  获取拟合函数的系数

    print("f1 is:\n",f1)

    p1 = np.poly1d(f1)

    print("p1 is:\n",p1)

    yvals = p1(x)

    print('yvals is:\n',yvals)

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

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

    plt.xlabel('x')

    plt.ylabel('y')

    plt.legend(loc=4)

    plt.title('polyfitting')

    plt.show()

    2.进行测试:

    在文件所在文件夹shift+鼠标右键打开Powershellc75146f37c558a172cb8070c98a2dcbbaeca02cb.pngShift+鼠标右键

    在Powershell中输入程序执行命令05169db74c8c7572d88b4ac57abc8d073a4a7134.png两个点1阶多项式拟合

    进行二阶拟合cdd98cb22445ab77f82fae76bfd31bb183911845.png10个点 2阶拟合

    进行八阶拟合a0cad23dee2c4d6eaff3f65a8181aa9e193a35c4.png8个点 8阶拟合

    指定函数拟合

    1.创建fxgiven.py:

    import matplotlib.pyplot as plt

    import numpy as np

    from scipy.optimize import curve_fit    # 导入拟合函数

    from sys import argv

    script,x_data,y_data = argv   # 参数变量

    x_data = x_data.split(",")        # 将字符串拆分成字符列表

    x_data = [float(i) for i in x_data] # 将字符列表转换为数字列表

    y_data = y_data.split(",")

    y_data = [float(i) for i in y_data]

    x = np.array(x_data)

    y = np.array(y_data)

    def fx(x,a,b):

    return a*np.exp(b/x)

    popt, pcov = curve_fit(fx, x, y)  # pcov 估计的popt的协方差

    print(popt)                  # popt满足函数参数最佳值

    yvals=fx(x,popt[0] ,popt[1]) # 求出拟合后对应点

    print(yvals)

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

    p2=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.savefig('p2.png')

    plt.show()

    2.进行测试:

    在Powershell中输入程序执行命令1f5aa66f6f9b5557468b02fb23105777450d0f3a.png6个点拟合y=a*exp(b/x)

    4aa545dccf7de8d4a93c2b2b8e3265ac0a26d216.png

    专栏文章仅作个人学习记录,如有错误,欢迎批评指正。

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

    展开全文
  • 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的scipy.optimize包里的curve_fit函数来拟合曲线,当然还可以拟合很多类型的曲线。scipy.optimize提供了函数最小值(标量或多维)、曲线拟合和寻找等式的根的有用算法。import numpy as npimport matplotlib...
  • 大家好,我正在尝试使用python拟合点的曲线,但是我还没有成功,我是使用python的初学者,我发现它没有帮助我.我有一组数据,我想分析哪条线最能描述它(不同阶的多项式).在numpy中,对于多项式拟合,有polyfit()和polyval()...
  • 原博文2019-06-02 14:35 −需要对数据... python的scipy.optimize包里的curve_fit函数来拟合曲线,当然还可以拟合很多类型的曲线。scipy.optimize提供了函数最小值(标量或多维)、...023537相关推荐2019-12-09 15:04...
  • 本文实例为大家分享了Python曲线拟合的最小二乘法,供大家参考,具体内容如下模块导入import numpy as npimport gaosi as gs代码"""本函数通过创建增广矩阵,并调用高斯列主元消去法模块进行求解。"""import numpy ...
  • 这是一个由加油站油罐传感器测量的油罐高度数据和出油体积,根据体积和高度的倒数,用截面积来描述油罐形状,求出拟合曲线,再用标准数据,求积分来验证拟合曲线效果和误差的一个小项目。 主要的就是首先要安装...
  • RANSAC算法详解(附Python拟合曲线和平面) 下文博主整理的很详细,请参考: https://lixin97.com/2019/04/10/RANSAC/
  • 什么是曲线拟合所谓的曲线拟合,就是使用某一个模型(或者称为方程式),将一系列的数据拟成平滑的曲线,以便观察两组数据之间的内在联系,了解数据之间的变化趋势。曲线拟合的作用在数据分析时,我们有时需要通过已...
  • 注意 :获得拟合曲线置信区间的实际答案由Ulrich 在此给出。经过一些研究(见这里 , 这里和1.96 ),我想出了自己的解决方案。它接受任意X%置信区间并绘制上下曲线。 这是MWE:from pylab import *from scipy....
  • 基于RGB图像或者3维点云数据的曲线检测有一定的应用场景,比如车道线检测、抛物线检测等等,其中曲线拟合算法是整个框架的核心。本文根据查阅过的相关文献和自己的思考,将曲线拟合算法进行总结和归纳,主要描述算法...
  • 例子:拟合一种函数Func,此处为一个指数函数。出处:SciPy v1.1.0 Reference Guide​docs.scipy.org#Headerimport numpy as npimport matplotlib.pyplot as pltfrom scipy.optimize import curve_fit#Def...
  • 您错误地调用了curve_fit,下面是用法curve_fit(f, xdata, ydata, p0=None, sigma=None, absolute_sigma=False, check_finite=True, **kw)f是您的函数,它的第一个参数是一组自变量,其后续参数是函数参数(如振幅、...
  • python 拟合曲线并求参

    2019-10-06 03:06:24
    python的scipy.optimize包里的curve_fit函数来拟合曲线,当然还可以拟合很多类型的曲线。scipy.optimize提供了函数最小值(标量或多维)、曲线拟合和寻找等式的根的有用算法。 import numpy as npimport...
  • 问题在于cos(x)可以变为负数,然后cos(x)^ n可以不确定.插图:np.cos(90)-0.44807361612917013和例如np.cos(90) ** 1.7nan这会导致您收到两条错误消息.如果您修改模型,例如到a b * np.cos(c * x d)....
  • 如下所示: from numpy import * import numpy as np import ... plt.title(show_line) plt.show() 以上这篇Python实现二维曲线拟合的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
  • 如何从Xfit创建一个严格单调子集的新数组,然后将曲线拟合到该子集上?比如:Xfit = np.hstack(((-1,-1,0,1,1),np.arange(1,10),(-7,9,10,10)))len_mono = 0Xfit_mono = zeros(Xfit.size)Xfit_mono_ind = zeros(Xfit...
  • 正如另一个答案中所建议的,您可以使用lmfit来解决此类问题。因此,我添加了一个例子来说明如何使用它,以防有人也对这个主题感兴趣。假设您有一个数据集,如下所示:xdata = np.array([177.,180.,183.,187.,189.,...
  • 我正在为我的数据绘制一条最佳拟合曲线。这是一个非常糟糕的数据样本,但是为了简单起见,让我们假设,我希望在log-log比例中画一条最适合的直线。在我想我已经用回归法做了,它会给我一个合理的拟合线。但我想用...
  • 如何使用SciPy曲线拟合函数拟合高斯曲线来关闭此错误?换句话说,如果它不符合模型的峰值,那么它就不是峰值,所以我不想返回任何东西。还有,有没有更快的方法?曲线拟合可能太慢,我的应用程序看大数据。在Runtime...
  • 切片图片1、数据格式分析99张bmp格式图片2、导入方法Python采用http://skimage.io对图片进行读取3、绘制方法(一)直观可视化,可以看到大体的血管的三维结构。(二)计算管道的半径,确定管道的中轴线方程,根据...
  • 我的问题涉及到统计学和python,我是这两方面的初学者。我正在运行一个模拟,对于...我不确定我所做的是否正确,也不确定我想做的是否可以做到,但我的问题是如何从曲线拟合产生的协方差矩阵中得到置信区间。代码首...
  • removed for clarity ...] ~/virtualenvs/py35/lib/python3.5/site-packages/scipy/integrate/quadpack.py in _quad(func, a, b, args, full_output, epsabs, epsrel, limit, points) 370 def _quad(func,a,b,args,...
  • 得到分散体系粒度分布的实验,其中会要求使用Origin进行数据处理,因为这个实验涉及到几个比较麻烦的地方根据实验所给出的沉降曲线数据(m-t图),绘制沉降曲线并根据已知超越方程对曲线进行拟合通过拟合所得的方程,...
  • # 指定legend的位置15 plt.title('2009-2018淘宝双十一销售额拟合曲线')16 plt.figure(figsize=(10, 10))17 plt.show()18 ​19 print('拟合多项式:',p1) #打印拟合多项式20 p1 = np.poly1d(z1)21 print("-"*40)22 ...
  • plt.title('polyfitting') plt.show() 使用插值拟合后,产生一个波峰一个波谷,我只想要个平滑的曲线,不知道有啥好办法 fq1 = interp1d(x, y1, kind='quadratic') fq2 = interp1d(x, y2, kind='zero') 下面代码是一...
  • 我一直在尝试将一些数据拟合到特定集合x和y的最佳拟合线。我尝试了很多次都没有成功,我似乎找不到一种使用yscale('log')和xscale.../usr/bin/env python# import the necessary modulesimport numpy as npimport m...

空空如也

空空如也

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

python拟合曲线

python 订阅