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. [POJ3783]Balls 题解

    题目大意 鹰蛋问题.$ n\(个蛋,\)m\(层楼. 存在一层楼\)E\(,使得\)E\(以及\)E\(以下的楼层鹰蛋都不会摔碎,问最坏情况下最少多少次能够知道\)E$. 非常经典的模型,初看题目根本 ...

  2. three.js 制作机房(下)

    这一篇书接上文,说一说剩下的一些模块. 1. 机箱存储占用比率 机箱存储占用比其实很简单,就是在机箱上新加一个组即可,然后根据比率值来设置颜色,这个颜色我们去HSL(0.4,0.8,0.5) ~ HS ...

  3. 一文读懂GaussDB(for Mongo)的计算存储分离架构

    摘要:IDC认为,目前阶段来看,企业亟待解决的是数字化能力提升,包括:与业务的深入结合能力:数据处理和挖掘能力:以及IT技术运营和管理能力.特别是数据处理和挖掘能力,因为数字化转型推进企业从以流程为核 ...

  4. Python 3.x pip安装报错ERROR: No matching distribution found for PIL

    安装完成即可解决无法引入PIL的问题.

  5. 41. The Security Namespace

    41.1 Web Application Security网络应用安全 41.1.1 <debug> 启用spring安全调试基础架构.这将提供人类可读的(多行)调试信息来监控进入安全过滤 ...

  6. CSS动画实例:Loading加载动画效果(三)

    3.小圆型Loading 这类Loading动画的基本思想是:在呈现容器中定义1个或多个子层,再对每个子层进行样式定义,使得其均显示为一个实心圆形,最后编写关键帧动画控制,使得各个实心圆或者大小发生改 ...

  7. 面试题-JavaSE语法

    1.Java 有没有 goto 语句? goto 是 Java 中的保留字,在目前版本的 Java 中没有使用.根据 James Gosling(Java 之父)编写的<The Java  Pr ...

  8. Vue源码解析,keep-alive是如何实现缓存的?

    前言 在性能优化上,最常见的手段就是缓存.对需要经常访问的资源进行缓存,减少请求或者是初始化的过程,从而降低时间或内存的消耗.Vue 为我们提供了缓存组件 keep-alive,它可用于路由级别或组件 ...

  9. C/C++ 程序反调试的方法

    C/C++ 要实现程序反调试有多种方法,BeingDebugged,NtGlobalFlag,ProcessHeap,CheckRemoteDebuggerPresent,STARTUPINFO,Is ...

  10. docker-machine在阿里云部署批量部署docker

    概述 docker入门中,docker swarm都是在本机的虚拟机上,为了更贴近生产环境,我将这部分重新部署到阿里云.不需要太贵,选最便宜的按量付费ECS,1小时才0.05元. docker-mac ...