python应用 曲线拟合04 → 多项式拟合


  • 主要是使用 numpy 库中的 polyfit() 函数,见第 66 行, z = np.polyfit(x_proton, y, 3) ,其中待拟合曲线的横纵坐标分别为第 1, 2 个参数,第 3 个参数 3 表示使用 3 次多项式拟合。得到的拟合结果写入返回列表 z,按照幂指数从高到低排序,比如这里 z[0] 代表 x3 前面的系数,z[1] 代表 x2 前面的系数,以此类推。
 import xlrd
import xlwt
import numpy as np
import matplotlib.pyplot as plt def pol2(x, a, b, c):
x = np.array(x)
return a + b*x + c*pow(x, 2) def pol3(x, a, b, c, d):
x = np.array(x)
return a + b*x + c*pow(x, 2) + d*pow(x, 3) def pol4(x, a, b, c, d, e):
x = np.array(x)
return a + b*x + c*pow(x, 2) + d*pow(x, 3) + e*pow(x, 4) def pol5(x, a, b, c, d, e, f):
x = np.array(x)
return a + b*x + c*pow(x, 2) + d*pow(x, 3) + e*pow(x, 4) + f*pow(x, 5) def pol6(x, a, b, c, d, e, f, g):
x = np.array(x)
return a + b*x + c*pow(x, 2) + d*pow(x, 3) + e*pow(x, 4) + f*pow(x, 5) +\
g*pow(x, 6) def main():
data_file = xlrd.open_workbook('./data_78As.xlsx')
sheet_proton = data_file.sheet_by_name('proton')
sheet_neutron = data_file.sheet_by_name('neutron') write_excl = xlwt.Workbook(encoding='utf-8')
write_sheet_proton = write_excl.add_sheet('proton')
write_sheet_neutron = write_excl.add_sheet('neutron') x_proton = sheet_proton.col_values(0)
x_proton_add = x_proton[:]
x_proton_add.insert(0, 0.23)
x_proton_add.insert(0, 0.22)
x_proton_add.insert(0, 0.21)
x_proton_add.insert(0, 0.20)
x_proton_add.append(0.36)
x_proton_add.append(0.37)
x_proton_add.append(0.38)
x_proton_add.append(0.39)
x_proton_add.append(0.40) j = 0
for temp in x_proton_add:
write_sheet_proton.write(j, 0, temp)
j = j + 1 for i in range(18):
y = sheet_proton.col_values(i+1)
plt.scatter(x_proton, y)
print(y)
# popt, pcov = curve_fit(pol5, x_proton, y, [1, 1, 1, 1, 1, 1])
# print(popt) z = np.polyfit(x_proton, y, 3) y_fit = pol3(x_proton_add, z[3], z[2], z[1], z[0])
plt.plot(x_proton_add, y_fit, color='green', linewidth=1.0)
plt.show()
j = 0
for temp in y_fit:
print(x_proton_add[j])
if x_proton_add[j] <= 0.23:
write_sheet_proton.write(j, i+1, temp)
j = j + 1
elif x_proton_add[j] > 0.23 and x_proton_add[j] < 0.35:
write_sheet_proton.write(j, i+1, y[j-4])
j = j + 1
else:
write_sheet_proton.write(j, i+1, temp)
j = j + 1 plt.clf()
x_neutron = sheet_neutron.col_values(0)
x_neutron_add = x_neutron[:]
x_neutron_add.insert(0, 0.23)
x_neutron_add.insert(0, 0.22)
x_neutron_add.insert(0, 0.21)
x_neutron_add.insert(0, 0.20)
x_neutron_add.append(0.36)
x_neutron_add.append(0.37)
x_neutron_add.append(0.38)
x_neutron_add.append(0.39)
x_neutron_add.append(0.40) j = 0
for temp in x_neutron_add:
write_sheet_neutron.write(j, 0, temp)
j = j + 1 for i in range(18):
y = sheet_neutron.col_values(i+1)
plt.scatter(x_neutron, y)
print(y)
# popt, pcov = curve_fit(pol5, x_proton, y, [1, 1, 1, 1, 1, 1])
# print(popt) z = np.polyfit(x_neutron, y, 3) y_fit = pol3(x_neutron_add, z[3], z[2], z[1], z[0])
plt.plot(x_neutron_add, y_fit, color='green', linewidth=1.0)
plt.show()
j = 0
for temp in y_fit:
if x_neutron_add[j] <= 0.23:
write_sheet_neutron.write(j, i+1, temp)
j = j + 1
elif x_neutron_add[j] > 0.23 and x_neutron_add[j] < 0.35:
write_sheet_neutron.write(j, i+1, y[j-4])
j = j + 1
else:
write_sheet_neutron.write(j, i+1, temp)
j = j + 1 write_excl.save("result_78As.xls") if __name__ == '__main__':
main()

得到结果:

python应用 曲线拟合04的更多相关文章

  1. Python web前端 04 盒子模型

    Python web前端 04 盒子模型 盒子模型是由内容(content).内边距(padding).外边距(margin).边框(border)组成的 一.边框 border #border 边框 ...

  2. Python并发编程04 /多线程、生产消费者模型、线程进程对比、线程的方法、线程join、守护线程、线程互斥锁

    Python并发编程04 /多线程.生产消费者模型.线程进程对比.线程的方法.线程join.守护线程.线程互斥锁 目录 Python并发编程04 /多线程.生产消费者模型.线程进程对比.线程的方法.线 ...

  3. Python网络编程04 /recv工作原理、展示收发问题、粘包现象

    Python网络编程04 /recv工作原理.展示收发问题.粘包现象 目录 Python网络编程04 /recv工作原理.展示收发问题.粘包现象 1. recv工作原理 2. 展示收发问题示例 发多次 ...

  4. Configuring Ubuntu for deep learning with Python in Ubuntu16.04

    博主最近浏览到一个网站PyImageSearch,看到里面的项目还不错,就顺手配置一下环境,试着去跑下里面的模型. 首先,需要配置好需要运行模型的环境,其实主要的步骤分为以下三步: 1. 安装Ubun ...

  5. 【Python】torrentParser1.04 增加获得磁力链URI功能

    代码: #------------------------------------------------------------------------------------ # torrentP ...

  6. chrome headless+selenium+python+(ubuntu 16.04/centos7) 下的实现

    Ubuntu 16.04 下: 0x01 安装chrome 1 下载源加入系统源列表 sudo wget http://www.linuxidc.com/files/repo/google-chrom ...

  7. Python标准库04 文件管理 (部分os包,shutil包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在操作系统下,用户可以通过操作系统的命令来管理文件,参考linux文件管理相关命令 ...

  8. Python快速学习04:循环 & 函数

    前言 系列文章:[传送门] 也就今天认识了 LC ,很开心. 本文目录 循环 for while 中断 函数 函数定义 函数调用 for循环 Python 中的for 循环象shell 脚本里的for ...

  9. python数据分析---第04章 NumPy基础:数组和矢量计算

    NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...

随机推荐

  1. 笑了,面试官问我知不知道异步编程的Future。

    荒腔走板 大家好,我是 why,欢迎来到我连续周更优质原创文章的第 60 篇. 老规矩,先来一个简短的荒腔走板,给冰冷的技术文注入一丝色彩. 上面这图是我五年前,在学校宿舍拍的. 前几天由于有点事情, ...

  2. C#LeetCode刷题之#849-到最近的人的最大距离(Maximize Distance to Closest Person)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3754 访问. 在一排座位( seats)中,1 代表有人坐在座位 ...

  3. Java实现经典七大经典排序算法

    利用Java语言实现七大经典排序算法:冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序. 分类 类别 算法 插入排序类 插入排序.希尔排序 选择排序类 选择排序.堆排序 交换排序类 ...

  4. 年近而立,Java何去何从?

    摘要:各种新需求新应用层出不尽,各路新生代编程语言异军突起等等,Java未来会不会继续受欢迎?曾经备受关注的Java是否能紧跟时代步伐?新基建时代破茧重生引领云端未来潮流? 1995年第一个Java版 ...

  5. windows10永久激活工具 新版win10激活工具(绝对有效的永久激活工具)

    来看这篇文章的,都用过KMS了吧?对!KMS是批量激活的,激活时间是一年,如果给女神激活,此法首选呀!!!但是帮基友激活,过了一年又来找自己,作为程序员的你,脸上是不是有点挂不住然后又不想花钱去买某宝 ...

  6. java.lang.NoSuchFieldError: No static field XXX of type I in class Lcom/XX/R$id; or its superclasses

    报错: 当启动一个页面的时候报错: java.lang.NoSuchFieldError: No static field XXX of type I in class Lcom/XXX/R$id; ...

  7. 28个漂亮的React.js后台管理模板

    React管理模板 为您的React Web应用程序开发一个管理区域可能非常耗时.它与设计所有前端页面一样重要. 这是2020年设计出色的顶级React.js后台管理模板的列表. 这些模板确实有价值, ...

  8. 在string.replace中使用具名组匹配

    let reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; let re = '2015-01-02'. r ...

  9. Git仓库由HTTPS切换成ssh秘钥连接

    Git关联远程仓库可以使用https协议或者ssh协议. [特点/优缺点] ssh: 一般使用22端口: 通过先在本地生成SSH密钥对再把公钥上传到服务器: 速度较慢点 https: 一般使用443端 ...

  10. 团队作业5:Alpha版本测试和发布(歪瑞古德小队)

    目录 一.项目文档和代码 二.Alpha版本测试报告 2.1 功能测试 2.1.1 功能列表 2.1.2 场景测试 2.1.3 测试结果 2.1.4 bug清单 2.2 兼容性测试 2.3 性能测试 ...