Matlab项目经验分享-去除震荡点
Matlab是做科研是比较常用的建模工具,我在研一做项目期间遇到了一个还算比较基础的问题,所以我打算记录下来并分享出来!
处理问题步骤:
1. 抛出问题
2. 思考解决方法
3. 代码验证看结果
抛出问题
在项目中有一批原始数据,在数据中有占很少比例的异样点,我们已经知道这些异样点是会影响结果精度的,需要剔除。
为了去除这些震荡点,我们自定义一些数据来进行模拟,用以找出去除方法,模拟的优势就在于能更快解决问题。
带有震荡点的模拟数据点图如下:

思考解决方法
在这个模拟数据点图中可以看出所有的异样点都在曲线的上部,异样点在曲线的一侧(全在上部或者全在下部)还算好处理,
若是有上有下则要复杂的多(以后的文章中应该还会讨论)。现在我们要想出一种好的算法来去除这些点,认真想想其实还
真不是太容易搞···。经过思考之后,明确了问题的关键所在:(1). 如何找出这些点:
方法:将每个点进行标号(0 1 2·· n),从第一个点开始,依次用后一个点的y值减去前一个点的y值并赋给自定义的变量diff1,
例:diff1 = y(i+1) - y(i)
若diff1 < 0 ,则继续,若diff1 > 0,则记录i+1这个点,并把i点作为新的起始点,用后面的点与i点做差,
例:diff1 = y(i+m) - y(i), m > 1, 直到遇到使diff1 < 0 的点,那这个点就是正常点,i点到此点之间的就都是异样点。
(2). 正常点之后还有异样点怎么解决?
方法:很简单,用迭代方法就可以解决,迭代之后就都可以解决
(3). 然后呢?
找出异样点之后,将这些点删除,用新的数据数组代替原有数据数组,问题就解决了
放个图可能更好理解:

代码验证看结果
具体的代码如下:arry = [];%存放异常点下标
i=1;
while(i<length(A(:,1))-1)
diff1 = A(i+1,2) - A(i,2);%后一点y值到前一点y值之差
if diff1 > 0
n = i;%记住异常值前一点的下标
m=1;
arry=[arry;n+m];%记住异常值下标
diff1 = A(i+m+1,2) - A(i,2);
while diff1 > 0
arry = [arry;n+m+1];
m = m+1;
diff1 = A(n+1+m,2) - A(n,2);
end
i=i+m;
end
i=i+1;
end %遍历数组 ARRY 删掉A中第arry(i)的元素 bb = A(:,2);
bb(arry) = [];
xi2 = [1:length(A(:,1))];
xi1 = xi2;
xi1(arry) = [];
result = interp1(xi1,bb,xi2)';
A_new = [A(:,1),result];
plot(A_new(:,1),A_new(:,2))。
代码比较简单,注释就不方那么多了,思路理解了,写代码就很清晰了
数据我就不展示了,看一下结果吧:

我们解决问题的时候,首先要解决自己思想上的问题,思路清晰之后才好动手操作,这就是为什么算法工程师要比程序员的工资高,努力做个优秀的打工人!
Matlab项目经验分享-去除震荡点的更多相关文章
- 项目经验分享[转自min.jiang]
最近三个月,我非常荣幸的做为TeamLeader带领几个小组成员做了一个国外项目,这里想为大家分享一些小经验,尽管我佣有六年多的项目经验,但我一直的方向是架构师.大家知道架构师一般情况是偏向技 ...
- Georgia Tech Online Master of Science in Computer Science 项目经验分享
Georgia Tech Online Master of Science in Computer Science 项目经验分享 Posted on 2014/04/22 项目关键词:工科名校,计算机 ...
- IdentityServer4系列之中文文档及实际项目经验分享
0.前言 原文:http://docs.identityserver.io/en/release/声明: 1.目录一至五章节根据IdentityServer英文文档翻译而来,有些内容会根据自己的理解来 ...
- Unity多媒体展示项目经验分享-ImageEffect+动态绑定
Unity多媒体展示项目经验分享-ImageEffect+动态绑定+网络通信 <ignore_js_op> “海尔科技展墙”是去年年初我们为上海家电博览会制作的一个多媒体展项,有限的工期以 ...
- [RxJava^Android]项目经验分享 --- 异常方法处理
简单介绍一下背景,最近RxJava很火,我也看来学习一下,计划在项目的独立模块中使用它.使用过程中遇到很多问题,在这里记录分享一下.可能有使用不当的地方,大家多多包涵.对于RxJava的基本概念和功能 ...
- 使用Webpack+Gulp开发运行于Dcloud平台HTML5+引擎的混合APP项目经验分享
什么是5+Runtime? 首先简单介绍一下5+Runtime: HTML5 Plus Runtime(5+Rumtime)是由Dcloud开发的一套"增强版的手机浏览器引擎",与 ...
- [RxJava^Android]项目经验分享 --- RxLifecycle功能实现分析(一)
最近在研究RxJava自定义操作符的实现原理,发现成型的项目案例较少.突然想起在项目中应用的RxLifecycle是使用自定义操作符,便拿来研究了一下.分析之前,跟大家了解一些相关操作符和RxLi ...
- jfinal想用到中大型项目中的项目经验分享
jfinal 用在大项目中更加方便实用,节省无数的开发时间,代码量相对 SSH 减少 75% 至 90%,对于项目结构来说,简单提以下几点: 1:先分大模块,大模块内部可以根据划分的model分成子包 ...
- 近期Responsive web design项目经验分享
关于meta <meta name="viewport" content="initial-scale=1.0, minimum-scale=1.0, user ...
随机推荐
- 第四章 NFS服务相关介绍
一.NFS服务介绍 1.什么是NFS?是一个共享存储,文件服务器 2.NFS基本概述NFS是Network File System的缩写及网络文件系统.NFS主要功能是通过局域网络让不同的主机系统之间 ...
- Error:(4, 17) java: 程序包org.junit不存在
内容:Error:(4, 17) java: 程序包org.junit不存在 场景:运行测试类的时候,IED新建一个自己的项目,并且不用maven的情况下 解决方案:File -> Projec ...
- 【应用服务 App Service】当使用EntityFrameWorkCore访问Sql Server数据库时,在Azure App Service会出现Cannot create a DbSet for ** because this type is not included in the model for the context的错误
问题情形 使用EF Core访问数据库,在本地运行正常,发布到App Service后,偶尔出现了Cannot create a DbSet for ** because this type is n ...
- Java实现:抛开jieba等工具,写HMM+维特比算法进行词性标注
一.前言:词性标注 二.经典维特比算法(Viterbi) 三.算法实现 四.完整代码 五.效果演示: 六.总结 一.前言:词性标注 词性标注(Part-Of-Speech tagging, POS t ...
- 记录Spring Boot 2.3.4.RELEASE版注解方式实现AOP和通知的执行顺序
1.advice 按照以下的顺序执行 输出结果:(正常和异常) 说明:Spring boot 2.3.4.RELEASE 版本使用的AOP是spring-aop-5.2.9.RELEASE,AOP的通 ...
- 理解cookie
Cookie的有效期 Cookie的maxAge决定着Cookie的有效期,单位为秒(Second).Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写 ...
- webpack 单独打包指定JS文件
背景 最近接到一个需求,因为不确定打出的前端包所访问的后端IP,需要对项目中IP配置文件单独拿出来,方便运维部署的时候对IP做修改.因此,需要用webpack单独打包指定文件. CommonsChun ...
- 【总结】vertica数据库
1.简介 Vertica是一款基于列式存储架构的数据库,可以支持存放多至PB级别的结构化数据 2.列式存储 行式存储就是以行为单位进行存储,再配合B+树作为索引,就能快速通过主键找到相应的行数据.即大 ...
- php socket通信的简单实现
socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...
- POJ2430 Lazy Cows
题意描述 Lazy Cows 给定一个 \(2\times b\) 的矩形,和 \(n\) 个矩形上的点. 要求你用 \(k\) 个矩形覆盖这 \(n\) 个点,使得每个点都被覆盖的前提下这些矩形的面 ...