python函数拟合不规则曲线_python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案...
第一种是进行多项式拟合,数学上可以证明,任意函数都可以表示为多项式形式。具体示例如下。
###拟合年龄
import numpy as np
import matplotlib.pyplot as plt
#定义x、y散点坐标
x = [10,20,30,40,50,60,70,80]
x = np.array(x)
print('x is :\n',x)
num = [174,236,305,334,349,351,342,323]
y = np.array(num)
print('y is :\n',y)
#用3次多项式拟合
f1 = np.polyfit(x, y, 3)
print('f1 is :\n',f1)
p1 = np.poly1d(f1)
print('p1 is :\n',p1)
#也可使用yvals=np.polyval(f1, x)
yvals = p1(x) #拟合y值
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) #指定legend的位置右下角
plt.title('polyfitting')
plt.show()
2 。 第一种方案是给出具体的函数形式(可以是任意的,只要你能写的出来 下面的func就是),用最小二乘的方式去逼近和拟合,求出函数的各项系数,如下。
##使用curve_fit
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
#自定义函数 e指数形式
def func(x, a, b,c):
return a*np.sqrt(x)*(b*np.square(x)+c)
#定义x、y散点坐标
x = [20,30,40,50,60,70]
x = np.array(x)
num = [453,482,503,508,498,479]
y = np.array(num)
#非线性最小二乘法拟合
popt, pcov = curve_fit(func, x, y)
#获取popt里面是拟合系数
print(popt)
a = popt[0]
b = popt[1]
c = popt[2]
yvals = func(x,a,b,c) #拟合y值
print('popt:', popt)
print('系数a:', a)
print('系数b:', b)
print('系数c:', c)
print('系数pcov:', pcov)
print('系数yvals:', 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) #指定legend的位置右下角
plt.title('curve_fit')
plt.show()
拟合高斯分布的方法。
#encoding=utf-8
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import pandas as pd
#自定义函数 e指数形式
def func(x, a,u, sig):
return a*(np.exp(-(x - u) ** 2 /(2* sig **2))/(math.sqrt(2*math.pi)*sig))*(431+(4750/x))
#定义x、y散点坐标
x = [40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135]
x=np.array(x)
# x = np.array(range(20))
print('x is :\n',x)
num = [536,529,522,516,511,506,502,498,494,490,487,484,481,478,475,472,470,467,465,463]
y = np.array(num)
print('y is :\n',y)
popt, pcov = curve_fit(func, x, y,p0=[3.1,4.2,3.3])
#获取popt里面是拟合系数
a = popt[0]
u = popt[1]
sig = popt[2]
yvals = func(x,a,u,sig) #拟合y值
print(u'系数a:', a)
print(u'系数u:', u)
print(u'系数sig:', sig)
#绘图
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')
plt.show()
总结
以上所述是小编给大家介绍的python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案,希望对大家有所帮助,也非常感谢大家对我们网站的支持!
本文标题: python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
本文地址: http://www.cppcns.com/jiaoben/python/300760.html
python函数拟合不规则曲线_python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案...相关推荐
- pandas使用read_csv函数读取文件的前N行数据并保留表头、pandas使用read_csv函数读取制表符分割的文件(tab-delimited)、自定义设置sep参数
pandas使用read_csv函数读取文件的前N行数据并保留表头.pandas使用read_csv函数读取制表符分割的文件(tab-delimited).自定义设置sep参数 目录
- Matlab 散点 拟合 曲率,有数据点,希望得到一条拟合曲线,再求出这条曲线的曲率,求助!...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 得到X,Y的数据点后,我尝试用origin7.5的analysis-fit sigmoidal功能拟合出曲线,由于方程太复杂,用公式计算很困难,我想用or ...
- python全栈是什么_Python全栈数据工程师养成攻略 PDF 下载
相关截图: 图书简介: 本书首先介绍了数据工程和Python语法,随后讲解如何获取和存储数据,并实现简单的静态可视化.文本作为一种极其重要的数据类型,也单独列出一章行讨论.之后读者将学习到关于Web建 ...
- python读取pcap获得端口_Python处理网络数据包示例(pcapy读pcap文件)
Python处理网络数据包示例(pcapy读pcap文件) 最近在围观python,找了个pcapy处理pcap数据的代码 非常非常久以前的东西了,应该是在项目组做的半成品吧.今天重装机器,不经意翻出 ...
- python题库和答案_Python数据分析与数据可视化_题库免费答案2020
Python数据分析与数据可视化_题库免费答案2020 更多相关问题 撰写纪要时,发现与会者发言质量不高时,可以进行拔高.提炼,一定要做好后期加工.() 在发布的对象中,凡是属于法规性文件,标题和正文 ...
- 已知 方程 用 matlab 求表达式,已知自变量,因变量和函数表达式,可以用matlab求出函数表达式中的未知参数吗...
答:这不是解方程,这是曲线拟合.如果你的已知的dr,R只有一个点,那么你的未知数是有无数个解的. cftool,拟合函数有一个选项是自定义函数. 答:用polyfit函数,即多项式拟合函数 设x=X- ...
- Python爬虫过程中验证码识别的三种解决方案
在Python爬虫过程中,有些网站需要验证码通过后方可进入网页,目的很简单,就是区分是人阅读访问还是机器爬虫.验证码问题看似简单,想做到准确率很高,也是一件不容易的事情.为了更好学习爬虫,后续推文中将 ...
- python编写程序转换进制_Python实现任意进制之间的转换
在日常生活中我们频繁使用到数学的进制,如季度逢三进一,星期逢七进一:生肖.小时使用12进制,每天使用24进制,每月使用30进制,分秒使用60进制,一年使用360进制等等:在编程过程中我们经常需要转换进 ...
- python线性拟合怎么做_python如何实现数据的线性拟合
实验室老师让给数据画一张线性拟合图.不会matlab,就琢磨着用python.参照了网上的一些文章,查看了帮助文档,成功的写了出来 这里用到了三个库 import numpy as np import ...
最新文章
- JSP中文乱码问题终极解决方案(转)
- [No0000176]Git常用命令速查表(收藏大全)
- SQL基础【七、Order by】
- C 语言和C++语言的 struct对比
- Android studio提示Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
- HDOJ 1030 Delta-wave
- 深度点评五种常见WiFi搭建方案
- 表1 中的值 给表2
- vue 动态数据请求
- php中__FILE__常量用法简介
- 我如何学习:不要停下学习的脚步
- 练习:编写循环,让用户输入内容,判断输入的内容以alex开头的,则将该字符串加上_SB结尾...
- 网赚项目:揭秘闲鱼项目,信息差赚钱新手也能日入200+
- 批量同时创建邮箱和AD账户
- 悟空问答 模板 html,WeCenter仿悟空问答模板
- 福州大学计算机专业排名2018,福州大学2019年排名第64位 较2018年下降3名
- 王者里的高清绝美海报(别再用黑乎乎的背景了)
- 基于java的CRM客户关系管理系统的设计和实现
- ORACLE学习笔记-ORACLE设置IP黑名单
- 你想知道的直播技术都在这里了
热门文章
- Github下载量10万次,最终被所有大厂封杀!
- 谷歌、微软2020年招新大幅萎缩:新冠流行打击科技巨头
- 五分钟了解机器学习十大算法
- DRF工程搭建、环境安装与配置
- python高阶函数(abs()、round()、map()、reduce()、filter())
- python集合用法详解(创建、添加(add()、update())、删除(remove()、discard()、pop())、查找(in、not in))
- Git远程仓库Github
- 固件模块之间的关系 C语言里面的模块
- 硬肝!超详细matplotlib基础介绍!!!
- 基于机器视觉的缺陷检测的原理与方法