加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

利用Python的scipy包实现曲线的拟合

发布时间:2020-12-20 10:56:32 所属栏目:Python 来源:网络整理
导读:调用scipy包中的curve_fit,可以根据指定的函数形式,对一组已知自变量和因变量的数据进行曲线拟合。 import numpy as npimport pandas as pdimport matplotlib.pyplot as plt from scipy.optimize import curve_fit# 自定义函数def func(x,a,b): return a*

调用scipy包中的curve_fit,可以根据指定的函数形式,对一组已知自变量和因变量的数据进行曲线拟合。

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 a*pow(x,b)


data = pd.read_excel(rC:UsersYBMDesktopdata.xlsx)
x = data[x]
y = data[y]

popt,pcov = curve_fit(x,y)
a = popt[0]
b = popt[1]
yvals = func(x,b)

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) # 指定legend的位置在右下角
plt.title(curve_fit)

?

也可以定义三个参数的函数:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit


def func(x,b,c):
    return a * np.exp(-b * x) + c


xdata = np.linspace(0,4,50)
y = func(xdata,2.5,1.3,0.5)
y_noise = 0.2 * np.random.normal(size=xdata.size)
ydata = y + y_noise
plt.plot(xdata,ydata,b-,label=data)

popt,pcov = curve_fit(func,xdata,ydata)
a = popt[0]
b = popt[1]
c = popt[2]
yvals = func(xdata,c)
plot1 = plt.plot(xdata,label=original values)
plot2 = plt.plot(xdata,label=polyfit values)
# 或:
plt.plot(xdata,func(xdata,*popt),r-,label=fit)

# 限制参数范围:0<a<3,0<b<20<c<1
popt,pcov = curve_fit(func,bounds=(0,[3.,2.,1.]))
plt.plot(xdata,label=fit)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读