数据插值

在图像处理领域,图像的放缩、去畸变、旋转会用到插值;在机器学习、深度学习等领域,面对样本较少的情况时同样会用到插值。当我们进行数据分析时,遇到数据量小、样本点不足的情况,这时就需要利用插值。从定义的角度出发,在给定离散点的基础上,通过插值算法得到一条经过所有n个离散点的曲线,根据曲线信息以及插值点信息来获取插值点的坐标,而插值的作用在于根据现有数据样本点增加样本数据量,其本质是获取新的数据点坐标信息。

数据拟合

根据测试数据建立数学模型,是工程中最为常见的拟合问题。数据拟合的意义在于:可实现针对测试数据的精确或最佳逼近、量化总体趋势并支持预测分析,通过拟合模型可以滤除噪声数据,同时支持数据点估值以及极值或最值寻优。

在MWORKS.Syslab中,数据插值的使用步骤为:数据插值预处理→创建插值模型函数→提取插值数据→图形可视化。具体操作如下:

◎  数据插值预处理

首先准备原始数据,生成9个数据以及内插xt1和外插xte的点位。

xs = 1:9
ys = [19.21 , 18.15 , 15.36 , 18.10 , 16.89 , 11.32 , 7.45 , 5.24 , 7.01]xt1 = 1:0.01:9 #插值点
xte = 0:0.01:10 #外插点

◎  创建插值模型函数

根据已有数据和选取方法创建插值模型函数。在Syslab中利用interpolate等函数和已知样本数据,创建插值模型函数,其代码如下所示:

# 最邻近样条插值
itp1_Ntp = ConstantInterpolation(xs,ys)
# 线性样条插值
itp1_linear = LinearInterpolation(xs,ys)
# 调用interpolate插值函数并设置插值模式inerpmode
itp1_spl2 = interpolate(ys,BSpline(Quadratic(Natural(OnGrid()))))
# 调用CubicSplineInterpolation样条插值函数并设置插值类型为外插
itp1_spl3 = CubicSplineInterpolation(xs,ys,extrapolation_bc=Line())

对于更高的插值度数(特别是二次样条插值及以上),样条插值无法计算出数据集边缘附近的值,并且需要求解方程组以获得插值系数,为此必须指定用于闭合系统的边界条件,即Flat、Line、Natual、Free、Periodic和Reflect。在指定边界条件时必须明确其适用对象,即作用在边界网格(OnGrid())还是应用在下一个(虚构的)网格点 (OnCell()) 中间的边缘点。

边界条件

Flat()

将外推斜率设置为零。

Line()

使用恒定斜率进行外推。

Periodic()

应用于周期性边界条件。

Reflect()

应用于反射边界条件。

Quadratic

(bc::BoundaryCondition)

表示对应的轴应该使用二次插值。

边界条件适用对象

OnGrid()

表示边界条件适用于第一个和最后一个节点。

OnCell()

表示边界条件在第一个和最后一个节点之外应用半网格间距。

(表1 边界条件与边界条件适用对象)

所有上述概念各自在类型层次结构中都有一个表示,从根本上影响插值函数的行为。

◎  提取插值数据

利用创建插值模型函数作用于目标点的x轴坐标,获取目标点的坐标点信息,提取数据。

y_Ntp = itp1_Ntp(xt1)# 获取最邻近插值数据点
y_linear = itp1_linear(xt1)# 获取线性样条插值数据点
y_spl2 = itp1_spl2(xt1) # 获取二次样条插值数据点
y_spl3 = itp1_spl3(xte) # 获取三次样条插值数据点

◎  图形可视化

最后绘制结果图像,其代码如下:​​​​​​​

#绘制插值结果图
figure("样条插值")
grid("on")
hold("on")
p1 = plot(xt1, y_Ntp, "k-") # 最邻近插值
p2 = plot(xt1, y_linear, "r") # 线性插值
p3 = plot(xt1, y_spl2, "b") # 二次插值
p4 = plot(xte, y_spl3, "#00FF00") # 三次样条 S(3,2)
p0 = plot(xs, ys, "o", markersize = 10, markeredgecolor = "b", markerfacecolor = "#FFFF00")
legend(["最邻近样条插值", "线性样条插值", "二次样条插值", "三次样条插值(外插)", "原始数据"], fontsize = 10)
xlabel("Xdata", fontsize = 10)
ylabel("Value", fontsize = 10)
title("一维样条插值", fontsize = 10)
hold("off")

插值方法的实现是根据原有数据进行插值后得到插值函数,输入自变量得到对应插值结果。Syslab为用户提供多项式插值、最邻近插值、线性插值、B样条插值、散点插值等多种方法。

MWORKS.Syslab插值方法

LinearInterpolation

线性插值

CubicSplineInterpolation

三次样条插值

Sinc_interpolate

一维插值(FFT方法)

ConstantInterpolation

最邻近插值

NewtonInterp

牛顿插值

LagrangeInterp

拉格朗日插值

interpolate

可根据参数调整算法的插值函数

Extrapolate

可根据参数调整算法的外插函数

在MWORKS.Syslab中,数据拟合的基本步骤为:数据预处理→模型定义→数据拟合→结果分析→图形可视化。以曲线拟合为例:

◎ 数据预处理

对数据异常点进行清洗、消除,得到如下散点图:

◎ 模型定义

定义目标曲线模型。

fitting(a,b,x) = a*b*x^(b-1)*exp(-a*x^b)

◎  数据拟合

调用WeibullFit函数对数据进行韦布尔拟合,得到目标模型的关键参数a,b。​​​​​​​

# 韦布尔拟合
a,b = WeibullFit(xdata,ydata)

◎  结果分析

在曲线拟合中,计算误差平方和SSE,判断数据拟合效果。​​​​​​​

# 计算误差平方和
SSE1 = SSE(ydata,fitting.(a,b,xdata))

◎  图形可视化

1.设置绘图点​​​​​​​

xplot = LinRange(0.1,6,100)
yplot = fitting.(a,b,xplot) # 获取拟合数据点以便绘图

2.拟合结果绘图

a = @sprintf("%0.4f",a)
b = @sprintf("%0.4f",b)
SSE1 = @sprintf("%0.4f",SSE1)
figure("Weibull拟合")
hold("on")
plot(xdata,ydata,"o",markersize = 8,markerfacecolor = "#FFFF00",markeredgecolor = "k")
title("Weibull拟合\n SSE:$SSE1  a = $a b = $b",fontsize = 10)
xlabel("xdata",fontsize = 10)
ylabel("value",fontsize = 10)
plot(xplot,yplot,"r")
legend(["原始数据","拟合曲线 y = a*b*x^(b-1)*exp(-a*x^b)"],fontsize = 10)
grid("on")

此外,Syslab还提供了二维拟合的算法和函数,示例如下:

◎ 数据预处理

对数据异常点进行清洗、消除,得到如下散点图:

◎  模型定义

根据模型关键参数,定义目标模型。

fitting(x,y,a,b,c,d) = a*sin(x+b) + c*cos(y+d)

◎  数据拟合

可选择自定义函数,使用自定义方法LM算法进行曲面拟合,得到模型的关键参数。​​​​​​​

@variables x y z a b c d
func = a*sin(x+b) + c*cos(y+d) # 自定义目标函数
vars = getvariables2(func) # 获取变量
p = LM2(func,X,Y,Z,[1,2,1,3]) # 调用LM2算法获取参数
a,b,c,d = p # 参数赋值

◎ 结果分析

计算曲面拟合误差平方和SSE,结果为142.6952954371209。​​​​​​​

# 计算误差平方和
SSE1 = SSE(xdata,fitting.(xdata,ydata,a,b,c,d))

◎  图形可视化

拟合结果绘图。

a = @sprintf("%0.2f",a)
b = @sprintf("%0.2f",b)
c = @sprintf("%0.2f",c)
d = @sprintf("%0.2f",d)
figure("自定义方程曲面拟合")
surf(Xplot,Yplot,Zplot)
hold("on")
scatter3(X,Y,Z,filled = true,facecolors = "r",s = 20)
title("自定义方程曲面拟合\n a = $a b = $b c = $c d = $d")
xlabel("xdata")
ylabel("ydata")
zlabel("value")
legend(["拟合曲面 z =  a*sin(x+b) + c*cos(y+d)" , "原始数据"])
hold("off")

数据拟合的实现是对数据集x,y进行指数拟合,从而获得固定表达式形式的曲线或自定义方程的关键参数。Syslab针对曲线拟合提供了线性拟合、指数拟合、对数拟合、幂拟合、多项式拟合、正弦拟合、韦布尔拟合、以及自定义方程曲线拟合。针对曲面拟合提供了二元多项式拟合以及自定义方程曲面拟合。

MWORKS.Syslab数据拟合

LinearFit

线性拟合:得到的直线数学表达式为

ExpFit

指数拟合:获得的拟合曲线为

LogFit

对数拟合:获得的拟合曲线为

PowerFit

幂拟合:获得的拟合曲线为

PolyFit

多项式拟合:获得的拟合曲线为

RationalFit

有理分式拟合:获得的拟合曲线为

SumofSineFit

正弦拟合:获得的拟合曲线如下,其中正弦函数个数为n

WeibollFit

韦布尔拟合:获得的拟合曲线为

LM

自定义方程曲线拟合

LM2

自定义方程曲面拟合

本文利用Syslab的基础数学库实现了对工程中几类典型的基于数据的插值与拟合,详细插值与拟合函数用法可参见Syslab基础数学库帮助文档。

MWORKS.Syslab作为新一代高级科学计算环境,可以高效解决科学与工程中遇到的矩阵运算、数值求解、数据分析、信号处理、控制算法设计优化、机器学习与并行计算等问题,实现基于模型对现代信息物理融合系统(CPS)开发的全流程支撑。

同元软控为用户提供免费版本的MWORKS.Syslab,欢迎大家前往同元软控官网自行下载。

下载地址:www.tongyuan.cc/download

点击查看原文:Syslab使用攻略 | 数据插值与数据拟合Syslab基础数学库实现了工程中基于数据的插值与拟合https://mp.weixin.qq.com/s/KPhPqGrl3x5WjFzsXy4rUg

同元Syslab使用攻略 | 数据插值与数据拟合相关推荐

  1. mysql2012更改表名_T-SQL入門攻略之13-修改数据表

    --> Title  : T-SQL入門攻略之13-修改数据表 --> Author : wufeng4552 --> Date   : 2010-07-12 修改表名与字段名-sp ...

  2. 悉尼大学商业数据科学与计算机学院,留学攻略—澳洲悉尼大学数据科学专业

    原标题:留学攻略-澳洲悉尼大学数据科学专业 留学攻略-澳洲悉尼大学数据科学专业 悉尼大学的数据科学硕士,比较适合热衷于从数据中挖掘有价值信息,并借此推动商业决策制定和研究成果的人士.悉尼大学数据科学硕 ...

  3. cdo (Climate Data Operators ) 常用命令介绍:(查看文件信息、多文件合并、数据裁剪、数据插值、数据计算。。)

    cdo介绍 : 一款极其强大方便的通过命令行进行气象数据处理与分析的软件,全称为:Climate Data Operators (CDO) CDO is a command line suite fo ...

  4. 每天6亿人在看《延禧攻略》?大数据告诉你哪家视频网站VIP值得买(附代码)

    导读:随着<延禧攻略>的播出,魏璎珞.富察皇后等各位后宫小主的命运时刻牵动着各位观众的心.同时爱奇艺也因为该剧的大火,收获了单日超过6亿的播放量.我们此次将对比各大视频网站2018年截止到 ...

  5. 软考高项信息系统项目管理工程师自考500元搞定攻略

    教程说明:软考高项的自考攻略,包含注册账号,报名,买自学教材等内容. 效果说明:这个主要是自控能力要强,每天都能自己坚持学习,这样才能很大概率通过. 费用说明:软考报名费用210元,教材费用245元, ...

  6. 获取网站上的旅游攻略信息,并作数据可视化

    1.爬取2023最新游记有什么好玩的地方-适合年轻人的旅游攻略-去哪儿攻略 (qunar.com) 1.导入相应的库 import requests import parsel import csv ...

  7. ​0元开公司攻略,想开公司的你必须了解一下!

    最近新开了家公司,到现在没有花一分钱,真正实现了0元开公司.萃见今天就跟大家分享分享. 如果你是新手准备开公司,或者是公司开了没多久,那么请把这篇文章反复的去看,一定会收获巨大.这篇开公司的实操教程, ...

  8. 强的离谱,如何用Python兼职接单?攻略来袭!大数据推送给即将暴富得人!

    一.python爬虫是可以做副业的,主要是爬取网站.小程序或者APP的数据,对数据进行分析与处理,或者直接向客户提供爬虫程序与技术支持. 当初学会Python那会儿,有朋友来介绍我去接私活,是为一家公 ...

  9. matlab插值与拟合例题_MATLAB中数据插值和数据拟合的用法

    一.数据插值: 插值是在一组已知数据点的范围内添加新数据点的技术.可以使用插值来填充缺失的数据.对现有数据进行平滑处理以及进行预测等.MATLAB 中的插值技术可分为适用于网格上的数据点和散点数据点. ...

最新文章

  1. Machine Learning week 9 quiz: programming assignment-Anomaly Detection and Recommender Systems
  2. oracle-单行函数
  3. 二分查找法的循环与递归实现及时间复杂度分析
  4. 树莓派3b安装ubuntu mate(在有显示器前提下看)
  5. php 正则mysql语句_MySQL正则表达式搜索 - mysql数据库栏目 - 自学php
  6. java数据库实体层封装_Java通过JDBC封装通用DAO层
  7. 解决anaconda下载很慢
  8. Quartus II 9.0正式版下载
  9. ROS机器人操作系统——ROS介绍
  10. 车票预订系统 搭建服务器,火车票网上订票系统的设计与实现.doc
  11. 【基于SpringBoot的企业人事管理系统】
  12. 2020年计算机夏令营总结
  13. VS2013 简单MFC应用以及teechart使用方法
  14. 努比亚计科学计算机,最后6天倒计时 努比亚为您揭晓未来科技
  15. linux每日命令,Linux日常命令整理
  16. mt8788 android 9.0 通过按键来打开APK
  17. git分支branch详解
  18. 基于Ubuntu20.04应用服务器的磁盘挂载与卸载
  19. DC升压高压电源模块可调直流12V24V转80V95V130V330V210V700V
  20. JS逆向——工信部ICP、IP、域名信息备案管理平台

热门文章

  1. WordPress+Flutter开发APP教程:2.创建项目
  2. ubuntu访问win10共享文件
  3. 打不开计算机组的打印机,添加打印机时设备和打印机窗口打不开怎么办
  4. 手把手教你,用Auto-GPT自动写个网站(保姆级)
  5. Linux 6.x 下Oracle 11g R2 安装配置
  6. 【电竞数据】接口调用范例代码-联赛数据
  7. 小米面试总结(附答案)
  8. 政务中心3D室内导航系统
  9. 南京5A景区选择飞鱼星为游客提供优质WiFi
  10. ios修改apn的插件_Apple苹果手机iOS设置APN详解