Попробуйте выразить проблему в матрицах. MATLAB и Octave оптимизированы для матричных операций. Вот выдержка из того, что сайт документации MATLAB говорит о векторизованных циклах :
Программное обеспечение MATLAB использует матричный язык, что означает, что оно разработано для векторных и матричных операций. Вы часто можете ускорить свой код, используя алгоритмы векторизации, которые используют преимущества этого дизайна. Векторизация означает преобразование циклов for
и while
в эквивалентные векторные или матричные операции.
Они также предоставляют простой пример векторизации цикла для вычисления синуса значений 1001 в диапазоне от 0 до 10:
i = 0;
for t = 0:.01:10
i = i + 1;
y(i) = sin(t);
end
К векторизованной версии того же кода:
t = 0:.01:10;
y = sin(t);
Более подробная информация содержится в MATLAB Руководство по векторизации кода
и некоторые примеры из этих нескольких связанных вопросов: