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