美文网首页
matlab离散数据的plot图像的零点个数

matlab离散数据的plot图像的零点个数

作者: 胜负55开 | 来源:发表于2019-05-12 20:54 被阅读0次

    需求,离散数据用plot画完后(默认相邻2点间用线性相连)得到的图像,纯求这个图像x轴有多少个交点,即有多少个零点。注意:只需要个数即可。

    例如,下面这个实际数据图像

    图1:原始数据图像与x轴相交

    再强调一句:我们只需要零点的个数!不需要具体在哪里、坐标是什么。
    操作如下:

    clear ; clc;
    
    % 获得数据:
    x = xlsread('shuju.xlsx');
    x = x(1001:1001+1023)';  % 有效数据长必须是2^n,所以我去1024,最后10几个点是0
    N = length(x);
    fs = 100;          % 采样频率 = 1/采样间隔
    t = (0:N-1)/fs;  % 时间刻度
    
    % 开始秀操作: 
    x0 = x(1:N-1).*x(2:N);  % 这一步是关键!
    xzero = find(x0<0);
    zero_total = length(xzero);  % 结果是48个
    
    % 上面的3步也可以用一步完成:
    % zero_total = sum( x(1:N-1).*x(2:N)<0 );
    

    如何理解:x(1:N-1)与x(2:N)的对应点相乘,相当于是原始序列x中的"相邻两点数据相乘",小于0的判断就是看"相邻两点"间是不是变号了!!如果小于0,就是变号了,就是这两个相邻点间一定有一个"图像的零点"!并且plot绘制的是"离散数据"的"线性插值"图像,即相邻两数据点一定是直线!即两点间一定是单调的

    说明:为什么不好得到具体的零点坐标?
    因为:这里的操作只能告诉我们0点在哪两个相邻数据点(横坐标)之间!我们只能定位到这里,具体零点的坐标这里得不到!

    要想得到具体的坐标,那么每一段的线性插值函数表达式要知道!这不是不行,只是稍微麻烦了一些。现在是线性插值,如果是三次样条插值等,那么获得每两点间的函数表达式就更麻烦了。


    拓展:两组离散数据(横坐标一致)的plot图像交点
    思路:做差;判断做差后的结果零点个数,就是原始两组数据的交点个数。

    相关文章

      网友评论

          本文标题:matlab离散数据的plot图像的零点个数

          本文链接:https://www.haomeiwen.com/subject/gmrhaqtx.html