第一种是进行多项式拟合,数学上可以证明,任意函数都可以表示为多项式形式。具体示例如下。

###拟合年龄

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 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案...相关推荐

  1. pandas使用read_csv函数读取文件的前N行数据并保留表头、pandas使用read_csv函数读取制表符分割的文件(tab-delimited)、自定义设置sep参数

    pandas使用read_csv函数读取文件的前N行数据并保留表头.pandas使用read_csv函数读取制表符分割的文件(tab-delimited).自定义设置sep参数 目录

  2. Matlab 散点 拟合 曲率,有数据点,希望得到一条拟合曲线,再求出这条曲线的曲率,求助!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 得到X,Y的数据点后,我尝试用origin7.5的analysis-fit sigmoidal功能拟合出曲线,由于方程太复杂,用公式计算很困难,我想用or ...

  3. python全栈是什么_Python全栈数据工程师养成攻略 PDF 下载

    相关截图: 图书简介: 本书首先介绍了数据工程和Python语法,随后讲解如何获取和存储数据,并实现简单的静态可视化.文本作为一种极其重要的数据类型,也单独列出一章行讨论.之后读者将学习到关于Web建 ...

  4. python读取pcap获得端口_Python处理网络数据包示例(pcapy读pcap文件)

    Python处理网络数据包示例(pcapy读pcap文件) 最近在围观python,找了个pcapy处理pcap数据的代码 非常非常久以前的东西了,应该是在项目组做的半成品吧.今天重装机器,不经意翻出 ...

  5. python题库和答案_Python数据分析与数据可视化_题库免费答案2020

    Python数据分析与数据可视化_题库免费答案2020 更多相关问题 撰写纪要时,发现与会者发言质量不高时,可以进行拔高.提炼,一定要做好后期加工.() 在发布的对象中,凡是属于法规性文件,标题和正文 ...

  6. 已知 方程 用 matlab 求表达式,已知自变量,因变量和函数表达式,可以用matlab求出函数表达式中的未知参数吗...

    答:这不是解方程,这是曲线拟合.如果你的已知的dr,R只有一个点,那么你的未知数是有无数个解的. cftool,拟合函数有一个选项是自定义函数. 答:用polyfit函数,即多项式拟合函数 设x=X- ...

  7. Python爬虫过程中验证码识别的三种解决方案

    在Python爬虫过程中,有些网站需要验证码通过后方可进入网页,目的很简单,就是区分是人阅读访问还是机器爬虫.验证码问题看似简单,想做到准确率很高,也是一件不容易的事情.为了更好学习爬虫,后续推文中将 ...

  8. python编写程序转换进制_Python实现任意进制之间的转换

    在日常生活中我们频繁使用到数学的进制,如季度逢三进一,星期逢七进一:生肖.小时使用12进制,每天使用24进制,每月使用30进制,分秒使用60进制,一年使用360进制等等:在编程过程中我们经常需要转换进 ...

  9. python线性拟合怎么做_python如何实现数据的线性拟合

    实验室老师让给数据画一张线性拟合图.不会matlab,就琢磨着用python.参照了网上的一些文章,查看了帮助文档,成功的写了出来 这里用到了三个库 import numpy as np import ...

最新文章

  1. JSP中文乱码问题终极解决方案(转)
  2. [No0000176]Git常用命令速查表(收藏大全)
  3. SQL基础【七、Order by】
  4. C 语言和C++语言的 struct对比
  5. Android studio提示Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
  6. HDOJ 1030 Delta-wave
  7. 深度点评五种常见WiFi搭建方案
  8. 表1 中的值 给表2
  9. vue 动态数据请求
  10. php中__FILE__常量用法简介
  11. 我如何学习:不要停下学习的脚步
  12. 练习:编写循环,让用户输入内容,判断输入的内容以alex开头的,则将该字符串加上_SB结尾...
  13. 网赚项目:揭秘闲鱼项目,信息差赚钱新手也能日入200+
  14. 批量同时创建邮箱和AD账户
  15. 悟空问答 模板 html,WeCenter仿悟空问答模板
  16. 福州大学计算机专业排名2018,福州大学2019年排名第64位 较2018年下降3名
  17. 王者里的高清绝美海报(别再用黑乎乎的背景了)
  18. 基于java的CRM客户关系管理系统的设计和实现
  19. ORACLE学习笔记-ORACLE设置IP黑名单
  20. 你想知道的直播技术都在这里了

热门文章

  1. Github下载量10万次,最终被所有大厂封杀!
  2. 谷歌、微软2020年招新大幅萎缩:新冠流行打击科技巨头
  3. 五分钟了解机器学习十大算法
  4. DRF工程搭建、环境安装与配置
  5. python高阶函数(abs()、round()、map()、reduce()、filter())
  6. python集合用法详解(创建、添加(add()、update())、删除(remove()、discard()、pop())、查找(in、not in))
  7. Git远程仓库Github
  8. 固件模块之间的关系 C语言里面的模块
  9. 硬肝!超详细matplotlib基础介绍!!!
  10. 基于机器视觉的缺陷检测的原理与方法