Правильное использование для циклов в Matlab - PullRequest
2 голосов
/ 08 марта 2011
for ii=1:size(K) 
  Xsol(ii) =  (K(ii) - average/2) ; 
  Xsag(ii) =  (K(ii) + average/2) ;
end

Я получаю следующий вывод:

Xsol =

    5.5000

Xsag =

   36.5000 

Но может быть так Xsol(1) и Xsol(2)Как я мог получить это?

Ответы [ 2 ]

4 голосов
/ 08 марта 2011

Если K - матрица 1 x N, то size(K) дает [1 N].Когда вы используете его в цикле for, он не работает, поскольку он не является скаляром (на самом деле, и весьма болезненно, Matlab просто использует первый элемент для ограничения цикла и даже не выдает предупреждение).Вместо этого напишите:

for ii=1:numel(K) 
  Xsol(ii) =  (K(ii) - average/2) ; 
  Xsag(ii) =  (K(ii) + average/2) ;
end

Функция numel возвращает скаляр, т.е. общее количество элементов.

Однако, как отмечает @Jonas, вам не нуженцикл в этом случае.В целом, циклы очень медленны по сравнению с операциями с массивами.

2 голосов
/ 08 марта 2011

Вместо того, чтобы выполнять вычисления внутри цикла, вы также можете вызвать

Xsol = K - average/2;
Xsag = K + average/2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...