Позвольте мне немного покритиковать ваш код, поскольку вы признали, что были новичком в этом. Сначала вы создаете вектор
n = [0:1:N-1];
Который, кстати, не нуждается в квадратных скобках и может быть записан как
n = 0:N-1;
Затем вы генерируете вектор x_n
, который для заданных значений будет состоять из нулей (sin(pi*n)
==0 для целочисленных значений n
).
Затем вы делаете что-то странное — кажется, вы генерируете символьную последовательность, зацикливая переменную n
, которая очень похожа на массив n
, который вы определили ранее. Не уверен, что с этим делать - не похоже на отличную идею. Обратите внимание, что даже @jazzbassrob был смущен этим — тот факт, что вы получили ошибку «невозможно индексировать с нулем», был не из-за значения вашего вектора n
, а из-за того, что вы зацикливались с 0..N-1
в команде _seqgen (не то же самое, хотя это и те же значения).
В этом выражении _seqgen я вижу exp(k*n/N)
, которое работает, потому что в этом контексте n
— это переменная, которая проходит через 0..N-1
— если бы Matlab смотрел на более раннее определение n
, он выдал бы другую ошибку из-за несоответствия размеров (поскольку *
— это матрица оператор умножения и ожидает, что второе измерение первого элемента будет равно первому измерению второго элемента).
Более стандартным способом сделать то, что вы пытаетесь сделать, было бы
mySum = sum(x_n.*exp(k.*n/N));
Это выполняет поэлементное умножение членов в x_n и exp
поэлементного произведения k
и n
, деленного на N
.
Примечание. Является ли это на самом деле «лучше», зависит от того, что вы хотите сделать с результатом (это оценивается выше).
person
Floris
schedule
09.03.2013