2013-03-08 5 views
2

내가 인덱스 벡터의 제품과 같은 인덱스 행렬을 요약하기 위해 노력하고있어이어야합니다 :옥타브 오류 : 첨자 지수는 양의 정수 또는 전에 논리

k=[0:1:N-1] 
n=[0:1:N-1] 
x_n = sin(pi*n) 
N = size(x_n,2) 
_seqgen(x_n(n)*exp(k*n/N), n, 0..N-1) 

을하지만 오류 얻을 :

error: subscript indices must be either positive integers or logicals 

무엇이 여기에 있습니까?

편집 : 방금 생성 된 시퀀스를 합산하기 위해 _plus 함수를 놓친 것을 깨달았습니다. 그것은 다음과 같이한다 : 당신이 지수에 긍정적 인 아닌 수의 배열을하려고 :

k=[0:1:N-1] 
n=[0:1:N-1] 
x_n = sin(pi*n) 
N = size(x_n,2) 
_plus(_seqgen(x_n(n)*exp(k*n/N), n, 0..N-1)) 
난 아직도하지만 같은 오류가

...

+1

오류가 꽤 똑바로 보인다. – ddmps

+0

나는 내가 matlab/octave를 사용하기 시작했다는 것을 잊어 버렸다. 나는 이것을 위해 여러 가지 방법을 온라인에서 찾았지만, 난 그냥 난처한 상황이다. – Cesar

답변

5

오류 메시지가 잘못에 대해 설명 정수 또는 논리. 코드에서 유일한 배열 인덱싱은 x_n(n)입니다. 그리고 확실하게, 라인 n=[0:1:N-1]0이 양수가 아니기 때문에 인덱스 n이 양수가 아님을 보여줍니다. Lesson : MATLAB/Octave는 항상 1부터 색인을합니다. 저는 여러분에게 꼭 알아야 할 기본 자료이므로 실제 튜토리얼을 제안합니다.

+0

사용자 @ user2150186 방어에서 오류는 인덱스 작성 식의 유형 (또는 클래스) 자체에 근본적으로 문제가있는 것처럼 들립니다. 문제가 _one_single_ _ _ _ _ _ _ _ _ _ _ _을 (를) 첨자로 사용하는 경우 메시지가 너무 화려합니다. "0은 유효한 색인이 아닙니다"IMO 훨씬 더 좋을 것입니다. – user7610

2

코드에 대한 비평을 제공 할 수있게 해줍니다. 귀하가이 일에 초보자임을 인정한 이후입니다. 먼저 벡터는 주어진 값이 될 것이다, 벡터 x_n을 생성 그런

n = 0:N-1; 

으로 또한, 대괄호를 필요로하지 않고 기록 할 수

n = [0:1:N-1]; 

를 만들 모두 0 (n의 정수 값의 경우 sin(pi*n) == 0).

다음으로 이상한 일을합니다. 심볼릭 시퀀스를 생성하는 것처럼 보입니다. 변수 n은 이전에 정의한 배열 n과 매우 흡사합니다. 그걸 어떻게 만들지 모르겠다 - 좋은 생각처럼 보이지는 않습니다. @jazzbassrob조차도 이것으로 혼란 스러웠습니다. "0으로 색인 할 수 없습니다"라는 오류는 벡터 n의 값 때문이 아니라 _seqgen 명령에서 에서 루핑했기 때문에 발생했습니다. 같은 값이 되더라도 같은 일이 일어난다. (이후,이 때문에 치수 불일치의 또 다른 오류가 발생 할 매트랩 n의 이전 정의를 찾고있는 경우 - 그 _seqgen 표현에서

,이 맥락에서 n 변수가 0..N-1을 통해 강화되고 있기 때문에 작동 exp(k*n/N) 참조 *은 행렬 곱셈 연산자이며 첫 번째 요소의 두 번째 차원은 두 번째 요소의 첫 번째 차원이 될 것으로 예상합니다.

당신이 x_n의 조건의 원소 별 곱셈과 원소 별 제품의 exp을 수행

mySum = sum(x_n.*exp(k.*n/N)); 

것입니다 무엇을하려고 할 더 표준적인 방법 knN으로 나눈 값입니다.

참고 - 실제로 이것이 "더 나은지"여부는 결과에 대한 작업 (위의 평가 결과)에 따라 다릅니다.

+0

네 말이 맞아, 나는 그것을 놓쳤다. 전반적으로 상당히 이상한 코드 조각 ... – jazzbassrob