2014-04-16 3 views
-2

코드를 실행하고 "인덱스가 매트릭스 크기를 초과합니다"라는 오류가 표시되지만 이유를 모르겠습니다."인덱스가 매트릭스 크기를 초과합니다."오류

function [ p ] = myIsort2(p) 
%myIsort2 is based on myIsort but instead of sorting a row vector into 
%increasing order it sorts a structure array into decreasing order 

global order 

n=length(p); 

for i=2:n 

    x=p(1,i).exponent; 
    y=p(1,i).coeff; 
    j=i-1; 

    while (j~=0) && order(x,p(1,j).exponent)==1 

     %compares the order between 2 row vectors of the exponential field 
     %in order to sort them by making the smallest one come after the 
     %largest one 

     p(1,j+1).exponent=p(1,j).exponent; 
     p(1,j+1).coeff=p(1,j).coeff; 
     j=j-1; 

    end 

    p(1,j+1).exponent=x; 
    p(1,j+1).coeff=y; 

end 

end 

감사 : 여기

는 코드입니다.

+2

입력 매개 변수와 오류가 발생한 행이 없어도 오류를 이해하는 것은 어렵습니다. 적어도 명백한 오류는 보이지 않습니다. 나는'dbstop if error'를 사용하고 인덱스가 멈출 때 그것을 검사 할 것입니다. – Daniel

답변

2

에서 p(1,n)까지의 인덱스를 사용하여 액세스 할 수있는 p에 액세스 할 수 있습니다. n = length(p)입니다.

오류가 발생하는 경우 pn 개 열 미만입니다. length은 치수가 p 인 크기입니다. 따라서 p에 열보다 많은 행이있는 경우이 오류가 표시됩니다.

예 : p

  • 한다고 가정은 <10x5 double>이다.
  • n = length(p)n = 10을 반환합니다.
  • 그러나 p(1,10)p에 5 개의 열만 있기 때문에 Error: index exceeds matrix dimensions을 반환합니다. 대신 length

, 모든 차원의 크기를 얻을 수 size를 사용하거나 numel 요소의 총 수를 얻을 수 있습니다.

관련 문제