备战数学建模六之差值拟合
一维差值拟合
import numpy as np
from matplotlib import pyplot as plt
from scipy.interpolate import interp1dy=[3,5,9,7,18,16,6,5,9,10]
x=np.linspace(0,9,num=10)
#x=[0,1,2,3,4,5,6,7,8,9]#画出原始的序列
plt.figure()
plt.plot(x,y,'ro')
plt.legend()
plt.show()#将原始序列分成多段,用一次函数拟合为函数f1和用三次函数拟合为函数f2
f1=interp1d(x,y,kind='linear')
f2=interp1d(x,y,kind='cubic')#在原区间内均匀选取30个点,因为要插值到长度30.
x_pred=np.linspace(0,9,num=30)#用函数f1求出插值的30个点对应的值
y1=f1(x_pred)
#在图中画出插值的30个点并连成曲线
plt.figure()
# 颜色字符:‘b’ 蓝色,‘m’ 洋红色,‘g’ 绿色,‘y’ 黄色,‘r’ 红色,‘k’ 黑色,‘w’ 白色,‘c’ 青绿色,’#008000’ RGB 颜色符串。多条曲线不指定颜色时,会自动选择不同颜色。
# 线条样式:’‐’ 实线,’‐‐’ 破折线,’‐.’ 点划线,’:’ 虚线。
# 标记字符:’.’ 点标记,’,’ 像素标记(极小点),‘o’ 实心圈标记,‘v’ 倒三角标记,’^’ 上三角标记,’>’ 右三角标记,’<’ 左三角标记 等等。
plt.plot(x,y,'bo')
plt.plot(x_pred,y1,'-rx',label='linear')
plt.legend()
plt.show()#用函数f2求出插值的30个点对应的值
y2=f2(x_pred)
#在图中画出插值的30个点并连成曲线
plt.figure()
plt.plot(x,y,'bo')
#三次插值的点
plt.plot(x_pred,y2,'-rx',label='cubic')
plt.legend()
plt.show()
运行结果
二维差值拟合并画等高线
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import Rbf#引入径向基函数# data=pd.read_table(r'D:Desktop\新建文本文档.txt', #文件路径,前面的filepath_or_buffer符可以省略掉
# sep=','#指定数据中变量之间的分隔符,注意这里是中文的逗号 ,
# header=None , #不需要将原来的数据中的第一行读作表头
# names=['id','name','gender','native place'] , #重新为各列起变量名称
# converters={'id':str} ,#将ID转换为字符串,以免开头的00消失
# skiprows=2 , #跳过开头的两行数据
# skipfooter=2, #跳过末尾的两行数据
# comment='!' #不读取“!”开头的数据行
# )
filename=r'D:\FILEEEEEEEEEEE\0.txt'#数据文件地址,附件1df=pd.read_table(filename,sep=",",header=None ,engine='python')#读取文件
# print(df)
df1=df[0]#读取第一列数据df2=df[1]#读取第二列数据
df3=df[2]#读取第三列数据
odf1=np.linspace(600,1900,50)#设置网格经度
odf2=np.linspace(50,450,50)#设置网格纬度
odf1,odf2=np.meshgrid(odf1,odf2)#网格化
func=Rbf(df1,df2,df3,function='linear')#定义插值函数plt.cm.hot
odf3_new=func(odf1,odf2)#获得插值后的网格累计降水量
plt.contourf(odf1,odf2,odf3_new,levels=np.arange(odf3_new.min(),odf3_new.max(),(odf3_new.max()-odf3_new.min())/10),cmap='GnBu',extend='both')#画图
# 添加等高线
line = plt.contour(odf1,odf2,odf3_new,levels=np.arange(odf3_new.min(),odf3_new.max(),(odf3_new.max()-odf3_new.min())/10))
plt.clabel(line , inline=True, fontsize=12)
plt.show()
D:\FILEEEEEEEEEEE\python_math\pythonProject\Scripts\python.exe D:/FILEEEEEEEEEEE/python_math/差值拟合二维.py0 1 2
0 900 50 120
1 850 70 150
2 950 120 60
3 1000 400 500
4 1200 300 1200
5 1200 400 800
6 900 100 200
7 1500 200 600
关于拟合,低次拟合和指数拟合
#程序文件Pex15_1.py
import numpy as np
#plot画图的,rc是字体,legend是图例
from matplotlib.pyplot import plot,show,rc,legend,subplot
from scipy.optimize import curve_fit#字体15号,细黑
rc('font',size=15);rc('font',family='SimHei');
#arange生成数列,一个参数是终点前闭后开区间,两个参数起点终点,三个参数是步长
t0=np.arange(1,7)
x0=np.array([5.081, 4.611, 5.1177, 9.3775, 11.0574, 11.0524])
# polyfit是低阶拟合,(x坐标,y坐标,自变量最高阶数)xt返回多形式系数由高到低排列
# print(xt)#输出的是k(斜率)和b(截距)n=len(x0); jibi=x0[:-1]/x0[1:] #求级比
bd1=[jibi.min(),jibi.max()] #求级比范围
bd2=[np.exp(-2/(n+1)),np.exp(2/(n+1))] #q求级比的容许范围
print("级比",bd1)
print("级比容许范围",bd2)
if bd1[0]<=bd2[0] :print("级比下限不合适,请修改级比")
if bd1[1]>=bd2[1]:print("级比上限不合适,请修改级比")xt=np.polyfit(t0,x0,1);
#xh1返回多项式的值,就是x依次取t0中每个元素的值时xh1的值(kx1+b、kx2+b、kx3+b.....
xh1=np.polyval(xt,t0) #计算预测值
print("拟合的函数带入t0的各值的结果为",xh1)
xh2=np.poly1d(xt)
print("拟合函数为",xh2)
delta1=abs((xh1-x0))/x0 #计算相对误差#累加
x1=np.cumsum(x0)
#不用管lambda函数,xh2是个指数函数a*e^bt+c
xh2=lambda t,a,b,c: a*np.exp(b*t)+c
#curve_fit用于拟合指数函数,返回值para三个值依次是参数abc
para, cov=curve_fit(xh2, t0, x1)
xh21=xh2(t0,*para) #计算累加数列的预测值
#diff是求后一项与前一项的差值例:输入,[1,2,3,8,7]则,输出,[1,1,5,-1]np_r是合并两个元素,这里还原了累加的数据关系为原来的
xh22=np.r_[xh21[0],np.diff(xh21)] #计算预测值
delta2=np.abs((xh22-x0)/x0) #计算相对误差
print("拟合残差为",delta2)print("拟合的参数值为:", para); subplot(121)
plot(t0,x0,'s'); plot(t0,xh1,'*-')
legend(('原始数据点','线性拟合'),loc='upper left')
subplot(122); plot(t0,x1,'o'); plot(t0,xh21,'p-')
legend(('累加数据点','累加后拟合')); show()
运行结果为
级比 [0.5457424686750201, 1.1019301669919759]
级比容许范围 [0.751477293075286, 1.33071219744735]
级比下限不合适,请修改级比
拟合的函数带入t0的各值的结果为 [ 3.89788095 5.42519524 6.95250952 8.47982381 10.0071381 11.53445238]
拟合函数为
1.527 x + 2.371
拟合残差为 [0.08850618 0.09354655 0.24145114 0.14633114 0.08778848 0.14991049]
拟合的参数值为: [ 15.3914543 0.23111521 -14.76199989]
Can't find filter element
Can't find filter element进程已结束,退出代码0
备战数学建模六之差值拟合相关推荐
- 数学建模方法 —【06】拟合方法之curve_fit
拟合方法--curve_fit 今天来说说curve_fit拟合方法,在前面的博文中,我也介绍了其他两种拟合方法以及拟合优度的计算,有兴趣的读者可以看看: 数学建模方法-[03]拟合优度的计算(pyt ...
- 备战数学建模(Python)
备战数学建模(Python) Python之建模规划篇 Python之建模数值逼近篇 Python之建模微分方程篇 由于美国大学生数学建模大赛很快就要开赛了,所以我就打算在这几天内,好好的看看< ...
- 数学建模专栏 | 开篇:如何备战数学建模竞赛之 MATLAB 编程
作 者 简 介 卓金武,MathWorks中国高级工程师,教育业务经理,在数据分析.数据挖掘.机器学习.数学建模.量化投资和优化等科学计算方面有多年工作经验,现主要负责MATLAB校园版业务.曾2次获 ...
- 备战数学建模国赛,快速搞定算法模型!
全世界只有3.14 % 的人关注了 青少年数学之旅 说到数学建模,大家的第一反应就是国赛.美赛等数学建模比赛,但这只是冰山一角,不过这个反应却也很正常,因为很多小伙伴接触数学建模的契机,大部分还是因为 ...
- matlab实现查值,[数学建模(六)]使用MATLAB实现插值
常用的插值:拉格朗日多项式插值.牛顿插值.分段线性插值.Hermite 插值和三次样条插值. 1.拉格朗日插值法 function y=lagrange(x0,y0,x); n=length(x0); ...
- 备战数学建模15-灰色关联分析与灰色预测模型
目录 一.灰色系统理论与灰色关联分析 1-灰色预测的概念 2-灰色关联度与优势分析 3-灰色关联分析案例分析 4-灰色生成数列 二.灰色预测模型 1-灰色模型GM 2-灰色模型GM的建模步骤 3-灰色 ...
- 备战数学建模35-时间序列预测模型
目录 一.时间序列概念与分解模型 1-时间序列数据与基本概念 2-时间序列分解 二.SPSS中七种指数平滑模型 1-七种指数平滑模型简介 2-七种指数平滑模型具体分析 三.ARIMA模型相关的知识点 ...
- 备战数学建模9-层次分析法模型
层次分析法,简称AHP,是建模比赛中最基础的模型之一,其主要用于解决评价类问题,例如:哪中方案更好?哪位运动员或者员工表现得更优秀? 一.层次分析模型建立部分 下面我们看一道引出层次分析得例题,如下所 ...
- 备战数学建模1-MATLAB矩阵相关
目录 一.数值数据 二.常用函数 三.变量及其操作 四.矩阵的基础应用 五.MATLAB基本运算 六.字符串处理 七.特殊矩阵 八.矩阵变换 九.矩阵求值 十.矩阵的特征值与特征向量 十一.稀疏矩阵 ...
最新文章
- Imec推出高性能芯片的低成本冷却解决方案
- linux笔记软件,Linux Ubuntu学习笔记_软件管理
- 基于注意力机制的lstm实现_一种基于注意力机制的自动标点引擎的测试体验
- python编程100例头条-python 简单爬取今日头条热点新闻(一)
- bat 指定jdk_微服务开发 bat 一键批量启动 jar(效率小技巧)
- Android自定义控件前导基础知识学习(一)——Canvas
- 关于类与对象操作的细节与注意事项(c++细节篇三)
- LeetCode 450. 删除二叉搜索树中的节点
- android 充电模式deamon_Android MarsDaemon实现进程及Service常驻
- 对Java中字符串的进一步理解
- arm poky linux,opencv移植在4412和imx6(yocto 3.14.28 arm-poky-linux-gnueabi )上
- java math.floordiv,Math类的常用方法--田小江
- 传奇修改map地图教程_传奇地图Objects.wil与map文件的对应关系
- 什么是压力测试,如何做压力测试?
- 解决Go服务GC时间过长
- 对偶式与反函数_.数字逻辑.对偶式与反函数.数字逻辑下,对偶式与反函数和原函数的关系是什么?...
- 我用3天时间,整理了几十个项目的Python资料
- 一个独到程序员的深刻见解(转)
- 雷电模拟器使用adb命令(采坑)
- 网络安全证书已过期或不可信怎么办
热门文章
- 固态硬盘(SSD)和机械硬盘(HDD)区别对比介绍
- 四种Linux硬盘分区方式,硬盘分区原理和Linux分区方式。
- 10003--敏捷方法和Scrum方法论
- 分解连续自然数的和_正整数分解为几个连续自然数之和-阿里云开发者社区
- WPS表格简单入门_我的笔记_公式使用和编辑名称_名称管理器
- NFT科普 | 浅谈NFT投资逻辑与生态布局
- linux磁盘乱序 UUID,【工程师笔记】第一期:小议Linux下磁盘乱序问题
- Windows 2000 Resource Kit 中文版帮助
- 疫情之下从招聘看复工:IT行业人才需求缺口最大!
- 零基础在家就可以做的副业,七个兼职项目推荐