Scipy是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。
scipy.optimize中有curve_fit方法可以拟合自定义的曲线,如指数函数拟合,幂指函数拟合和多项式拟合,也能拟合直线方程函数。
curve_fit是使用非线性最小二乘法将函数f进行拟合,寻找到最优曲线。
下面汇总示例如下:
一、先导入所需要的包
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

plt.rcParams[‘font.family’] = [‘sans-serif’]
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]

二、自定义需要拟合的函数

# =============================================================================
# 指数函数拟合
# =============================================================================
def func(x, a, b ):return a*np.exp(-b * x)+1/150# =============================================================================
# 幂指数函数拟合
# =============================================================================
def func2(x, a, b ):return x**a +b# =============================================================================
# 多项式函数拟合
# =============================================================================
def func3(x, a, b, c ):return a*x**2+ b*x +c  # =============================================================================
# 高斯函数
# =============================================================================
def f_gauss(x, A, B, C, sigma):return A*np.exp(-(x-B)**2/(2*sigma**2)) + C

import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize#直线方程函数
def f_1(x, A, B):return A*x + B#二次曲线方程
def f_2(x, A, B, C):return A*x*x + B*x + C#三次曲线方程
def f_3(x, A, B, C, D):return A*x*x*x + B*x*x + C*x + Ddef plot_test():plt.figure()#拟合点x0 = [1, 2, 3, 4, 5]y0 = [1, 3, 8, 18, 36]#绘制散点plt.scatter(x0[:], y0[:], 25, "red")#直线拟合与绘制A1, B1 = optimize.curve_fit(f_1, x0, y0)[0]x1 = np.arange(0, 6, 0.01)y1 = A1*x1 + B1plt.plot(x1, y1, "blue")#二次曲线拟合与绘制A2, B2, C2 = optimize.curve_fit(f_2, x0, y0)[0]x2 = np.arange(0, 6, 0.01)y2 = A2*x2*x2 + B2*x2 + C2 plt.plot(x2, y2, "green")#三次曲线拟合与绘制A3, B3, C3, D3= optimize.curve_fit(f_3, x0, y0)[0]x3 = np.arange(0, 6, 0.01)y3 = A3*x3*x3*x3 + B3*x3*x3 + C3*x3 + D3 plt.plot(x3, y3, "purple")plt.title("test")plt.xlabel('x')plt.ylabel('y')plt.show()return

三、进行拟合并画出相应的曲线

if __name__=='__main__':data=pd.read_excel('data_p_2009-2018.xlsx')xdata=np.array(data['人均GDP(万元)'])ydata =np.array(data['期望寿命倒数'])#画出真实数据plt.plot(xdata,ydata,'b-')#指数函数拟合popt, pcov = curve_fit(func, xdata, ydata)#popt数组中,三个值分别是待求参数a,b,c#预测值y_pred = [func(i, popt[0],popt[1]) for i in xdata]#画图plt.plot(xdata,y_pred,'r--')print(popt)#输出R方from sklearn.metrics import r2_scorer2 = r2_score(ydata , y_pred )print('指数函数拟合R方为:',r2)#幂指数函数拟合popt, pcov = curve_fit(func2, xdata, ydata)#popt数组中,三个值分别是待求参数a,b,cy_pred2 = [func2(i, popt[0],popt[1]) for i in xdata]#画图plt.plot(xdata,y_pred2,'g--')print(popt)#输出R方from sklearn.metrics import r2_scorer2 = r2_score(ydata , y_pred2 )print('幂指数函数拟合:',r2)#多项式拟合popt, pcov = curve_fit(func3, xdata, ydata)#popt数组中,三个值分别是待求参数a,b,cy_pred3 = [func3(i, popt[0],popt[1],popt[2]) for i in xdata]#画图plt.plot(xdata,y_pred3,'y-')print(popt)#输出R方from sklearn.metrics import r2_scorer2 = r2_score(ydata , y_pred3 )print('多项式拟合R方为:',r2)#添加图例plt.legend(['原始数据','指数函数拟合','幂指数函数拟合','多项式拟合']) 本文转载于:土豆洋芋山药蛋、PHILOS_THU两位大佬的文章,感谢!

python 使用scipy中的curve_fit拟合自定义曲线相关推荐

  1. 用python的scipy中的odeint来解常微分方程中的一些细节问题(适用于小白)

    用python的scipy中的odeint来解常微分方程中的一些细节问题(适用于小白) 写在前面 最近有些需要解决常微分方程的问题,网上查了很多教程都不是很明晰,便自己研究了一段时间,写一点小白初次接 ...

  2. 数学建模可以用python吗_Python中常用的数学建模Scipy

    Python中常用的数学建模Scipy 发布时间:2020-09-10 16:56:48 来源:亿速云 阅读:116 本篇文章为大家展示了Python中常用的数学建模Scipy,代码简明扼要并且容易理 ...

  3. 数学建模常用算法汇总及python,MATLAB实现(五) —— 拟合

    拟合 比较重要的就是2.1和2.3 2.2可以浅看一下, 自己敲着试一试 就拟合部分来说, MATLAB比python强大很多, 自带cftool工具包, 并且有很多快速的函数, 个人建议使用MATL ...

  4. python画抛物线_在python中利用最小二乘拟合二次抛物线函数的方法

    1.最小二乘也可以拟合二次函数 我们都知道用最小二乘拟合线性函数没有问题,那么能不能拟合二次函数甚至更高次的函数呢?答案当然是可以的.下面我们就来试试用最小二乘来拟合抛物线形状的的图像. 对于二次函数 ...

  5. scipy中的scipy.optimize.curve_fit

    scipy中的scipy.optimize.curve_fit 这里写目录标题 scipy中的scipy.optimize.curve_fit 参数 Return scipy.optimize.``c ...

  6. Python在Seaborn中手动指定调色板颜色进行数据可视化颜色自定义实战(Manually Specify Palette Colors in Seaborn)

    Python在Seaborn中手动指定调色板颜色进行数据可视化颜色自定义实战(Manually Specify Palette Colors in Seaborn) 目录

  7. python使用matplotlib中的errorbar函数可视化误差条、并自定义数据点标记、数据点大小、数据点颜色、数据点边缘颜色、误差棒颜色、误差棒线条宽度、误差棒边界线长度、误差棒边界线厚度等

    python使用matplotlib中的errorbar函数可视化误差条.并自定义数据点标记.数据点大小.数据点颜色.数据点边缘颜色.误差棒颜色.误差棒线条宽度.误差棒边界线长度.误差棒边界线厚度等 ...

  8. python调用mysql中的自定义function并且返回结果

    首先在Mysql中创立一个叫ForeignKeyTest的function,链接如下: https://blog.csdn.net/appleyuchi/article/details/7945291 ...

  9. python choice添加下拉框_自定义Django Form中choicefield下拉菜单选取数据库内容实例...

    工作中遇到的问题,自定义了一个forms.form表单,某项需要作出下拉菜单,下拉菜单中的选项需要从数据库(objectForm models)中提取. form.py为: class objectF ...

最新文章

  1. 机器学习驱动技术是生物学进步的下一个突破
  2. 如何创建一个数据科学项目?
  3. 成功解决TypeError: sequence item 0: expected str instance, bytes found
  4. 当identity_insert 设置为off时不能为表_硬盘跳线怎么设置 硬盘跳线设置方法【详解】...
  5. docker搭建ldap
  6. linux mount 日志,mount
  7. (2)Linux进程调度器-CPU负载
  8. BT种子结构及bencoding编码解析
  9. ISO9001:2000标准的主要特点和要求(转载)
  10. 制作u盘linux课程报告,定制U盘Linux系统总结报告-Linux文档类资源
  11. LNode *和LinkList的小区分
  12. 658.一元二次方程公式
  13. Java中introduce方法,Introduce Foreign Method (引入外加函数)
  14. C++ placement new 用法
  15. python协程gevent案例:爬取斗鱼美女图片
  16. 【疯壳·无人机开发教程1】开源编队无人机-开机测试
  17. 选择题汇总6-7(括号里填的答案都是对的,不用管下面那个答案正确与错误,因为作者懒得删了)
  18. 计算机水平用什么形容词形容,形容应用价值的词语有哪些 , 形容价值的成语有哪些...
  19. R语言-机器学习概述
  20. 大赛导师教程:冷风——商战王参考图片法,深扒光感氛围展现

热门文章

  1. HDU6681 二维偏序计算贡献值 树状数组 离散化
  2. 计算机在职博士好毕业么,计算机在职博士毕业答辩流程
  3. 网络分流器-网络分流器-高速网络流量采集方案
  4. emplace_back与push_back异同
  5. PD快充芯片sink诱骗取电XSP12工作原理,PD+QC+AFC+FCP全协议快充
  6. favicon.ico图标的制作方式
  7. 微信会员卡积分收银系统源码+搭建教程
  8. 达观数据:综述中英文自然语言处理的异和同
  9. 毕业设计-基于微信云开发的音乐播放系统
  10. python r语言 结合 部署_Win10 下安装R,rpy2,Rstudio 安装与配置 并实现Python 调用 R语言...