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

2019-05-12  本文已影响0人  胜负55开

需求,离散数据用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图像交点
思路:做差;判断做差后的结果零点个数,就是原始两组数据的交点个数。

上一篇下一篇

猜你喜欢

热点阅读