python函数拟合
- 背景
最近在抖音直播数学答疑的时候,恰好有一位朋友问到了这个问题,已知x,z,y三列数据如上图所示,请问y的最后一位数是多少?
乍一看,还以为很简单,拎(抡)起粉笔就一顿操作(猛如虎)
(1)分别将x,z,y三列数据记作3个数列{xn},{zn}\{x_n\}, \{z_n\}{xn},{zn} 和 {yn}\{y_n\}{yn}, 其中n表示其所在数列的序号或位置。
(2)很容易发现如下规律
zn−xn=6(1)z_n-x_n=6 \tag{1}zn−xn=6(1)
和
xn+yn=xn+1(2)x_n+y_n=x_{n+1} \tag{2}xn+yn=xn+1(2)
以及
zn+yn=zn+1(3)z_n+y_n=z_{n+1} \tag{3}zn+yn=zn+1(3)
将(2)和(3)组合一下便得到(1),即
zn−xn=zn+1−xn+1=6(4)z_n-x_n=z_{n+1}-x_{n+1} =6 \tag{4}zn−xn=zn+1−xn+1=6(4)
而问题相当于是要求{yn}\{y_n\}{yn}的下一个yn+1y_{n+1}yn+1,上面3个关系式中却没有任何项涉及到,故这些关系不能解决根本问题,现在摆在我们面前的有两条路
- 找出数列 {xn}\{x_n\}{xn} ,{zn}\{z_n\}{zn} 的下一项 m 和 m+6,然后利用(1)-(4)的关系进行求解yny_{n}yn 下一项 λ\lambdaλ;
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
x | -5 | 5 | 0 | 2 | 9 | 6 | 4 | 10 | m |
z | 1 | 11 | 6 | 8 | 15 | 12 | 10 | 16 | m+6 |
y | 10 | -5 | 2 | 7 | -3 | -2 | 6 | λ\lambdaλ |
- 直接找出 {yn}和{xn},{zn}\{y_n\} 和\{x_n\}, \{z_n\}{yn}和{xn},{zn} 之间的关系表达式, 即
yn=f(xn,zn)(5)y_n = f(x_n, z_n) \tag{5}yn=f(xn,zn)(5)
由 {xn}\{x_n\}{xn} 和 {zn}\{z_n\}{zn}的关系,(5)又可以改写成
yn=f(xn)(6)y_n = f(x_n) \tag{6}yn=f(xn)(6)
第一条道路相当于绕了一圈,简称间接法,第二条道路更直接,简称直接法,我们先采用直接法来进行解答
- 先画出{yn}和{xn}\{y_n\} 和\{x_n\}{yn}和{xn}散点图
为了找出{yn}和{xn}\{y_n\} 和\{x_n\}{yn}和{xn}之间的函数关系,我们可以先建立一个最简单最纯粹的假设
y=ax+b(7)y =ax+b \tag{7}y=ax+b(7)
没错,就是最简单的线性关系,然后拟合出来系数 a 和 b分别是 -0.97580645和5.0702765 (保留8位小数),这样{yn}和{xn}\{y_n\} 和\{x_n\}{yn}和{xn}之间的函数关系便是
y=−0.9758x+5.07(8)y = -0.9758 x + 5.07\tag{8}y=−0.9758x+5.07(8)
然后画出来拟合函数,观察其与原数列之间的差距
我们看到除了第1个点和第5个点靠得近,其余的点差距还是挺大的,既然一次拟合性能太差,那么我来个2次函数呗,即假设
y=ax2+bx+c(9)y =ax^2+bx+c \tag{9}y=ax2+bx+c(9)
观察发现2次函数拟合和1次函数拟合没啥大的区别,再继续提高拟合函数次数
4次时候
观察发现第1,3,4,5四个点都靠的比较近,差距在缩小,继续提高次数
5次的时候
观察发现第2,6,7三个点拟合的还不够完美,继续提高次数
6次的时候
此时,拟合曲线恰好经过数列{yn}\{y_n\}{yn}的7点,可以认为拟合效果比较完美,此时的拟合函数为
y=−0.01265x6+0.2035x5−0.591x4−4.176x3+22.7x2−24.32x+2(10)y = -0.01265 x^6 + 0.2035 x^5 - 0.591 x^4 - 4.176 x^3 + 22.7 x^2 - 24.32 x + 2 \tag{10}y=−0.01265x6+0.2035x5−0.591x4−4.176x3+22.7x2−24.32x+2(10)
将x = 10代入上(10)式,求得 y = -351.60606060605966
从y值可以猜出这是一个无限循环小数,循环节为6060,故最后所求的y值为
−351.6060˙-351.\dot{6060}−351.6060˙
- 完整代码
# -*- coding: utf-8 -*-
"""
Project name: 找规律
Description:
Created on Sun Sep 20 17:27:34 2020
@author: 帅帅de三叔
"""
import numpy as np #导入数值分析模块
import matplotlib.pyplot as plt #导入绘图模块x0 = [1, 2, 3, 4, 5, 6, 7]
x = [-5, 5, 0, 2, 9, 6, 4]
z = [1, 11, 6, 8, 15, 12, 10]
y = [10, -5, 2, 7, -3, -2, 6]plt.figure(figsize = (6,4))
plt.scatter(x0, x, color = 'r', label = "x")
plt.scatter(x0, z, color = 'g', label = "z")
plt.scatter(x0, y, color ="brown", label = "y")coef = np.polyfit(x, y, 6) #求出系数
print('拟合函数的系数 :\n', coef ) #打印出系数
funExpression = np.poly1d(coef) #求出表达式
print('拟合表达式 :\n',funExpression) #打印出表达式
yFit =np.polyval(funExpression, x) #求出拟合函数的y值
print("拟合出来的y值:\n", yFit)
plt.plot(x0, yFit, color = 'blue', label ="fitting line")nextY = np.polyval(funExpression, 10) #求出拟合函数的y值
print("所求的y的值为:", nextY )
plt.legend(loc = "upper left")
plt.show()
参考文献
1, https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.polyfit.html
python函数拟合相关推荐
- python函数拟合不规则曲线_python曲线拟合
Python曲线拟合 前言 这篇文章的由来:前几天在做大学物理居家实验水滴法测量声速的时候需要使用phyphox软件导出的数据拟合y=1/(a+b*x)曲线.虽然老师要求使用Origin软件拟合,但是 ...
- python函数拟合编程_Python应用实现双指数函数及拟合代码实例
双指数函数 待拟合曲线为 y(x) = bepx + ceqx import matplotlib.pyplot as plt x = ([0.05, 0.1, 0.15, 0.2, 0.25, 0. ...
- python函数拟合不规则曲线_python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案...
第一种是进行多项式拟合,数学上可以证明,任意函数都可以表示为多项式形式.具体示例如下. ###拟合年龄 import numpy as np import matplotlib.pyplot as p ...
- python函数拟合求导_python – 使用scipy curve_fit通过两个数据点拟合指数函数
如果你想从两个数据点找到目标函数中的两个参数,这对于最小二乘拟合不一定是个问题:只需求解联立方程式y1 = b(x1 a)^ p和y2 = b( x2 a)^ p参数a和b: import numpy ...
- python函数拟合不规则曲线_python中的多变量(多项式)最佳拟合曲线?
接受的答复 this question 提供了 a small multi poly fit library,它将使用numpy完成所需的任务,您可以将结果插入到绘图中,如下所述. 您只需将x和y点的 ...
- Python对自定义离散点进行指定多项式函数拟合
自定义离散点进行指定多项式函数拟合 用户自己自己输入坐标点,拟合函数可根据用户输入的多项式的最高次方进行自动拟合函数,拟合方法采用最小二乘法进行函数拟合. (1,2),(2,5),(3,10),(4, ...
- python散点图拟合曲线-python散点图拟合
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 下面是我在文本文件中绘制数据散点图的代码. 我打开的文件包含两列. 左列为x坐标 ...
- [转载] Python 多项式拟合(一元回归)
参考链接: Python | 多项式回归的实现 一元一阶线性拟合: 假设存在一条线性函数尽量能满足所有的点:y=ax+b .对所有点的的公式为: 残差值β = 实际值y - 估计值y,β 应尽量小,当 ...
- python数据拟合
python数据拟合 文章目录 python数据拟合 1.多项式拟合 1.1 多项式拟合描述 1.2 多项式拟合实现 2.自定义函数拟合 2.1 自定义函数拟合描述 2.1 自定义函数拟合的实现 1. ...
- Python数据拟合幂函数y=ax^b
Python数据拟合--幂函数y=ax^b from scipy.optimize import curve_fit import numpy as np import matplotlib.pypl ...
最新文章
- hibernate三级缓存概括
- php适配器模式应用,什么是适配器模式,它有哪些应用场景
- Sentinel 发布里程碑版本,添加集群流控功能
- *.zip、*.tar、*.tar.gz、*.tar.bz2、*.tar.xz、*.jar、*.7z
- 操作系统:Linux 环境变量配置的 6 种方法!
- (转)WCF教程系列(1)-创建第一个WCF程序
- P4139-上帝与集合的正确用法【欧拉定理】
- spring pom设置_Spring社交Twitter设置
- mysql的相关技术说明_MySQL 系统架构 说明
- eslint是什么_一起来用 eslint 吧
- Axure自动幻灯片制作
- 土地转移矩阵的计算步骤
- CRMEB制作docker-compose
- Android OpenGL ES 2.0(六)--- 纹理过滤
- 现代通用计算机析雏形,计算机作业一、选择题 1.______B______是现代通用计算机的雏形。 A. 宾州大学于1946年2月研制成功的E...
- 独上高楼望尽天涯路;为伊得人憔悴、衣带渐宽终不悔;几处早莺争暖树,乱花渐欲迷人眼;梅先菊后何须较、好似人生各有时;
- java.lang.Integer常用方法
- 题解 UVA12304 【2D Geometry 110 in 1!】
- 诱人的Siri 开启人机交互的大门
- Linux libusb USB开发(一)—— USB设备基础概念
热门文章
- TS流基本知识【HI3798 AVPLAY播放TS流】
- MapGIS67及Map2Shp安装教程
- 有感于《游戏脚本高级编程》的劣质翻译
- VSCode 中文乱码设置
- 【D-S证据理论】学习笔记
- python程序设计与实验_用于创建实验的Python应用程序和库
- 朴素模式匹配算法和KMP匹配算法 详细
- matlab中英文文献,matlab外文文献
- c语言的编译器手机版,C语言编译器下载_C语言编译器APP手机最新版安装 - 风云下载...
- 用flash做古诗动画_Flash制作跟我学 用遮罩技术制作古诗动画-FLASH课件制作(FLASH课件制作教程)-flash课件吧(湖北金鹰)...