Индексирование массивов в matlab от 0 - PullRequest
1 голос
/ 03 октября 2011

Для математического класса, который я беру, мне нужно написать программу для вычисления БПФ функции.Нам дали код в классе.У меня возникают проблемы при вводе кода в matlab, потому что индекс начинается с 0. Это код, указанный в классе:

Input: q,N,f(k)
Output: d(k)

sigma(0) = 0

for r = 0 to q-1
  for k = 0 to (2^r)-1
      sigma((2^r)+k) = sigma(k) + 2^(q-1-k)
  end
end

for k = 0 to N-1
   d(k) = f(sigma(k))/N
end

for r = 0 to q-1
  M = 2^r
  Theta = e^(-i*pi()/M)
 for k = 0 to M-1
   for j = 0 to 2^(q-1-r)-1
     x = theta^(k)*d(2*j*M+k)-x
     d(2*j*m+k) = d(2*j*M+k)+x
   end
 end
end

Обычно это не сложно реализовать, но индикаторы меня отталкивают,Как мне написать этот код, начиная циклы с индекса 1 вместо 0 (программа должна быть написана в Matlab)?Обычно я просто вручную вычисляю первый член (0 членов) и помещаю его вне цикла, а затем смещаю цикл на один индекс.Эта проблема, однако, не так проста.Спасибо.

Ответы [ 2 ]

3 голосов
/ 03 октября 2011

Просто добавьте один, когда вы индексируете в массив.Например:

sigma((2^r)+k+1) = sigma(k+1) + 2^(q-1-k)

Кроме того, используйте 1i, когда вы имеете в виду sqrt(-1), поскольку это яснее, безопаснее, поскольку вы можете случайно перезаписать значение i или j и быстрее.

0 голосов
/ 03 октября 2011

я бы сделал каждый индекс массива как "i индекс массива ", а затем немедленно изменил бы индекс массива на i индекс массива - 1. затем вы можете используйте индекс массива для математической части и i * индекс массива * для индексации указанных массивов.

пример:

вместо

for i = 0:n
    sum = sum + i*array(i);
end

я бы сделал

for ii = 1:n+1
    i = ii-1;
    sum = sum + i*array(ii);
end

РЕДАКТИРОВАТЬ: невероятно глупая опечатка: ii должен идти от 1: n + 1 - вот и весь смысл моих изменений!

...