我试图绘制两个不相同长度的时间序列矢量:
E_Real
(1x1)双时间序列,1481409个元素"采样率= 0,001"。 E_Guess
(1x1)双时间序列,384426个元素"采样率= 0,0059"。MATLAB不会抱怨绘制这两个向量并显示下图:
我的问题是蓝线在红色线之前结束并且它看起来不好(因为矢量的长度不同)。我尝试使用interp1
解决此问题:
x = 0:0.0059:1481409; % this will make x a Array of Point from 0 to 1481409
y = interp1(E_Guess.Time,E_Guess.Data,x);
应根据y
创建一个新的向量E_Guess
,其长度与E_Real
相同。但是,我总是得到y=0
而没有任何错误消息。
这种方法有什么问题?
答案 0 :(得分:1)
我感觉你没有正确使用数据的“x轴”。 看看下面的代码:
function q42538517
y = @(x)0.9/1000*x;
x_Real = linspace(0,1481409*0.001,1481409);
E_Real = y(x_Real);
x_Guess = linspace(0,384426*0.0059,384426);
E_Guess = movmean(y(x_Guess) + 0.1*sin(x_Guess/100) + 0.05*randn(1,384426), ...
10, 'Endpoints', 'shrink');
% What you're probably doing:
figure();
plot(E_Guess,'b','LineWidth',3); hold on; plot(E_Real,'r','LineWidth',3);
ylim([0,2.5]);
% What you probably should be doing:
figure();
plot(x_Guess,E_Guess,'b','LineWidth',3); hold on; plot(x_Real,E_Real,'r','LineWidth',3);
xlim([0 1500]); ylim([0,1.5]);
分别导致:
由于E_Real
的时间范围比E_Guess
(1481409*0.001 < 384426*0.0059
)更短,因此无需插入较长的以使其适合短片,如上所示,只需切割x轴(通过xlim
)。