试图访问向量中的索引

时间:2013-09-23 11:07:10

标签: matlab signal-processing electronics

这是计算奈奎斯特稳定性标准的函数的一部分。当向量reim没有五个元素时,函数会出错:

  

试图访问im(5);因为数字(im)= 4,所以索引越界。   稳定性错误(第27行)       tran(w)= re(1)+ re(2)* w。^ 1 + re(3)* w。^ 2 + re(4)* w。^ 3 +       re(5) w。^ 4 + 1i (...

我想将0分配给缺少的元素。

function answear=stability(re,im)
%% Function check stability of system
%re is real part of transmitation
%im is imagine part of transmitation


%% data

for n=1:length(re)
    if(re(n) == [ ])
        re(n) = 0;
    end
end

for n=1:length(im) 
    if(im (n)== [ ])
        im(n) = 0;
    end
end

if( length(re) > length(im))
    root = length(re);
else
    root = length(im);
end

for w=1:root
    tran(w) = re(1) + re(2)*w.^1 + re(3)*w.^2 + re(4)*w.^3 + re(5)*w.^4 +1i*(...
     im(1) + im(2)*w.^1 + im(3)*w.^2 + im(4)*w.^3 +im(5)*w.^4);
end

2 个答案:

答案 0 :(得分:1)

以下是扩展向量以确保其至少包含5个元素的两种方法。每个人都是从不同的想法开始,但也做同样的事情。

最紧凑:

x = [1 2 3];
x(end+1:5) = 0;

为矩阵后面的所有元素指定零,直到第五个元素。

但是,如果你已经知道了元素的数量,那就更紧凑了:

x = [1 2 3];
if numel(x)<5
   x(5) = 0;
end

请注意,这将使用零自动扩展,直到它有5个元素。无论向量的方向如何,这些方法的优点在于它的工作原理。

答案 1 :(得分:0)

如果你想用零填充矢量以确定它至少有5个元素我建议如下:

  1. 制作5个零的向量
  2. 用向量填充pad的前X个元素(让我们称之为A
  3. 对于A开头少于5且A超过5个元素的示例:

    A= [1 2 3]
    n=5
    pad = zeros(1,n)
    pad(1:length(A)) = A 
    
    clear
    
    A = [5 6 7 8 9 4 3]
    n=5
    pad = zeros(1,n)
    pad(1:length(A)) = A