Matlab是做科研是比较常用的建模工具,我在研一做项目期间遇到了一个还算比较基础的问题,所以我打算记录下来并分享出来!

  处理问题步骤:
1. 抛出问题
2. 思考解决方法
3. 代码验证看结果
  1. 抛出问题

    在项目中有一批原始数据,在数据中有占很少比例的异样点,我们已经知道这些异样点是会影响结果精度的,需要剔除。

    为了去除这些震荡点,我们自定义一些数据来进行模拟,用以找出去除方法,模拟的优势就在于能更快解决问题。

    带有震荡点的模拟数据点图如下:

  2. 思考解决方法

    在这个模拟数据点图中可以看出所有的异样点都在曲线的上部,异样点在曲线的一侧(全在上部或者全在下部)还算好处理,

    若是有上有下则要复杂的多(以后的文章中应该还会讨论)。现在我们要想出一种好的算法来去除这些点,认真想想其实还

    真不是太容易搞···。经过思考之后,明确了问题的关键所在:

         (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). 然后呢?
    找出异样点之后,将这些点删除,用新的数据数组代替原有数据数组,问题就解决了

    放个图可能更好理解:

  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项目经验分享-去除震荡点的更多相关文章

  1. 项目经验分享[转自min.jiang]

        最近三个月,我非常荣幸的做为TeamLeader带领几个小组成员做了一个国外项目,这里想为大家分享一些小经验,尽管我佣有六年多的项目经验,但我一直的方向是架构师.大家知道架构师一般情况是偏向技 ...

  2. Georgia Tech Online Master of Science in Computer Science 项目经验分享

    Georgia Tech Online Master of Science in Computer Science 项目经验分享 Posted on 2014/04/22 项目关键词:工科名校,计算机 ...

  3. IdentityServer4系列之中文文档及实际项目经验分享

    0.前言 原文:http://docs.identityserver.io/en/release/声明: 1.目录一至五章节根据IdentityServer英文文档翻译而来,有些内容会根据自己的理解来 ...

  4. Unity多媒体展示项目经验分享-ImageEffect+动态绑定

    Unity多媒体展示项目经验分享-ImageEffect+动态绑定+网络通信 <ignore_js_op> “海尔科技展墙”是去年年初我们为上海家电博览会制作的一个多媒体展项,有限的工期以 ...

  5. [RxJava^Android]项目经验分享 --- 异常方法处理

    简单介绍一下背景,最近RxJava很火,我也看来学习一下,计划在项目的独立模块中使用它.使用过程中遇到很多问题,在这里记录分享一下.可能有使用不当的地方,大家多多包涵.对于RxJava的基本概念和功能 ...

  6. 使用Webpack+Gulp开发运行于Dcloud平台HTML5+引擎的混合APP项目经验分享

    什么是5+Runtime? 首先简单介绍一下5+Runtime: HTML5 Plus Runtime(5+Rumtime)是由Dcloud开发的一套"增强版的手机浏览器引擎",与 ...

  7. [RxJava^Android]项目经验分享 --- RxLifecycle功能实现分析(一)

      最近在研究RxJava自定义操作符的实现原理,发现成型的项目案例较少.突然想起在项目中应用的RxLifecycle是使用自定义操作符,便拿来研究了一下.分析之前,跟大家了解一些相关操作符和RxLi ...

  8. jfinal想用到中大型项目中的项目经验分享

    jfinal 用在大项目中更加方便实用,节省无数的开发时间,代码量相对 SSH 减少 75% 至 90%,对于项目结构来说,简单提以下几点: 1:先分大模块,大模块内部可以根据划分的model分成子包 ...

  9. 近期Responsive web design项目经验分享

    关于meta   <meta name="viewport" content="initial-scale=1.0, minimum-scale=1.0, user ...

随机推荐

  1. <img>元素边距问题

    解决方式: 给 img 元素设置成 "块" display:block; 另一种 vertical-align: bottom;

  2. frida框架hook参数获取方法入参模板

    python脚本 # -*- coding: utf-8 -*- import logging import frida import sys logging.basicConfig(level=lo ...

  3. 小白:String函数总结

    string.h函数: 1.strlen 数出字符串存在多少字符: 2.strcmp 比较两个字符串,若相等返回0不相等返回1 3.strcpy(char *restrict dst,const ch ...

  4. 简单粗暴套娃模式组json发送https请求

    各位童鞋大家好,向来简单粗暴的铁柱兄给大家来玩一手套娃模式来组Json数据,不说别的,无脑套. 当然,这一手比较适合临场用一下,若长期用的话建议搞一套适用的框架,只管set就好了.话不多说开始上课. ...

  5. Java线程知识拾遗

    知识回顾 进程与线程是常常被提到的两个概念.进程拥有独立的代码段.数据空间,线程共享代码段和数据空间,但有独立的栈空间.线程是操作系统调度的最小单位,通常一个进程会包含一个或多个线程.多线程和多进程都 ...

  6. k8s中pod的yaml文件全面解读

    apiVersion: v1 #必选,版本号,例如v1,版本号必须可以用 kubectl api-versions 查询到 . kind: Pod #必选,Pod metadata: #必选,元数据 ...

  7. 我的第二次C语言作业

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-2/homework/11422 这个作业要求在哪里 https://www.cnblog ...

  8. 浅谈OpenGL之DSA

    今天准备写一篇文章简单介绍一下OpenGL4.5引入的一个新的扩展ARB_direct_state_access,这个扩展为OpenGL引入了一个新的特性就是Direct State Acess,下文 ...

  9. python代码实现抢票助手

    一. 代码使用Python+Splinter开发,Splinter是一个使用Python开发的开源Web应用测试工具,它可以帮你实现自动浏览站点和与其进行交互. 二. 安装好Python 3或2都可以 ...

  10. 总结distinct、group by 、row_number()over函数用法及区别

    distinct和group by 是一样的,查询去重,只能是全部重复的,也可以理解为针对单例,因为一行有一个字段不一样,他们就会认为这两行内容是不重复的.但是使用row_number()over这个 ...