Matlab 处理索引越界错误的最佳方法
我已经生成了一个时间信号并计算了它的零点上交点。现在我想计算两个连续的零向上交叉点的周期。我认为最好的选择是使用带有索引的循环。然而,我在边界处遇到了“索引超出边界”错误 这是我的密码:Matlab 处理索引越界错误的最佳方法,matlab,indexing,Matlab,Indexing,我已经生成了一个时间信号并计算了它的零点上交点。现在我想计算两个连续的零向上交叉点的周期。我认为最好的选择是使用带有索引的循环。然而,我在边界处遇到了“索引超出边界”错误 这是我的密码: t = 0:0.1:20; % time A = 3; % Amplitude x = A*sin(t); % Signal find_zero = diff(sign(x)); indx_up = find(find_zero>0); %
t = 0:0.1:20; % time
A = 3; % Amplitude
x = A*sin(t); % Signal
find_zero = diff(sign(x));
indx_up = find(find_zero>0); % find all upward going zero crossing index values
time = t(indx_up); % time values for zero crossings
for ii = 1:length(time)
period(ii) = time(ii+1)-time(ii);
end
我收到的错误:试图访问时间(5);索引超出范围,因为numel(时间)=4
有办法解决吗?我想你想要
for ii = 1:length(time)-1
但是你不能用period=diff(time)
替换整个循环吗?我想你想要
for ii = 1:length(time)-1
但是你不能用
period=diff(time)
替换整个循环吗?问题是当ii
从1变为length(time)
时,你正在访问time(ii+1)
。如果将for循环更改为,则问题将得到解决
for ii = 1:length(time)-1
问题是当
ii
从1变为length(time)
时,您正在访问time(ii+1)
。如果将for循环更改为,则问题将得到解决
for ii = 1:length(time)-1
如果你想在代码中使用
时间(ii+1)
,你可以使用for ii=1:length(time)-1
。如果你想在代码中使用时间(ii+1)
,你可以使用for ii=1:length(time)-1
。感谢所有的回复,而且@Dan你对第二个选项的选择是正确的!感谢所有的回复,第二个选项@Dan你是对的!