Простое ускорение кода - PullRequest
2 голосов
/ 23 августа 2011

Известно, что MATLAB работает медленно с циклом for.Я попытался векторизовать следующий код без успеха.Возможно, я ошибаюсь с реализацией.

for I = NS2:-1:1
         A = 0;
         for J=1:8
            A = A + KS2(J,I)*FA(J);
         end
         S2 = S2 + ( SS2(1,I)*sin(A) + SS2(2,I)*cos(A) );
      end

где: FA = матрица 1x8

KS2 = матрица 8x25

SS2 = матрица 2x25

A= scalar

S2 = scalar

Я пытаюсь улучшить его следующим образом:

A = 0;
J = 1:8;
for I = NS2:-1:1

 A = FA(1,J)*KS2(J,I);

 S2 = S2 + ( SS2(1,I)*sin(A) + SS2(2,I)*cos(A) );
 end

Однако время выполнения этого улучшения похоже на исходный код.

1 Ответ

4 голосов
/ 23 августа 2011

Попробуйте вместо этого (без петель):

A = (FA*KS2).';  %'# A is now 25-by-1
S2 = SS2(1,:)*sin(A) + SS2(2,:)*cos(A);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...