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 ...
随机推荐
- frida- registernatives获取so层动态注册函数
frida获取so层动态注册函数 谢谢大佬的无私奉献https://github.com/lasting-yang/frida_hook_libart 一.js模板一 function hook_Re ...
- 如何将vscode代码快速同步到github/gitee上
用git实现源代码管理几乎是程序员的必备操作,下面是简单实现流程: 在vscode打开代码所在文件夹 在左侧栏点击源代码管理 初始化存储库 添加远程存储库 输入远程仓库地址(没有仓库的要先建个仓) 输 ...
- MySQL历史
MySQL历史 马云生气了 去IOE活动 1979年 研发一个引擎 1996年 发布MySQL1.0 1999年 瑞典注册AB公司 2003年 MySQL 5.0版本 提供试图.存储过程 具有了一些企 ...
- Redis【二】 set|get那些事
redis4.0.9 SET\GET方法 从哪里开始 server.c里面有每个redis命令对应的执行方法 如 struct redisCommand redisCommandTable[] = { ...
- react-native中textInput在androidTV上的焦点处理(坑篇)
react-native中,开发androidTV输入框的焦点处理. 复述流程: 安卓TV上,无法通过上下左右键,以及遥控器的上下左右来获取输入框焦点. 原因: 脸书的锅,但没修,这里官方的说法,Te ...
- Moment.js常见用法总结
Moment.js常见用法总结 Moment.js是一个轻量级的JavaScript时间库,它方便了日常开发中对时间的操作,提高了开发效率. 日常开发中,通常会对时间进行下面这几个操作:比如获取时 ...
- react-native 常见问题
1.webpack使用babel-loader后编译报错 报错ERROR in ./entry.js Module build failed: SyntaxError: /Users/yixin/De ...
- ServletUtils取值(限foton)
1.String query = ServletUtils.getStringValue(request, "query", null); 2.boolean reload = S ...
- 深度对比Apache CarbonData、Hudi和Open Delta三大开源数据湖方案
摘要:今天我们就来解构数据湖的核心需求,同时深度对比Apache CarbonData.Hudi和Open Delta三大解决方案,帮助用户更好地针对自身场景来做数据湖方案选型. 背景 我们已经看到, ...
- 2. HttpRunnner录制生成用例
录制生成用例 为了简化测试用例的编写工作,HttpRunner 实现了测试用例生成的功能,对应的转换工具为一个独立的项目:har2case. 简单来说,就是当前主流的抓包工具和浏览器都支持将抓取得到的 ...