Самый простой способ ускорить код в MATLAB - воспользоваться векторизацией, чтобы избавиться от циклов.Вместо того, чтобы зацикливать каждую строку или столбец, попытайтесь применить целые операции вместо этого, например, чтобы умножить все строки матрицы M
с соответствующим вектором V
do:
M = magic(5)
V = rand(5,1)
M = M.*repmat(V,[size(M,1) 1])
в целом будет работать намного быстреечем эквивалент для цикла.
Фактическая реализация векторизации специфична для каждой проблемы, но очень полезные операторы являются поэлементными операторами, например: .* ./ .^
и т. д. Также функция repmat
чрезвычайно полезна.
В вашем случае, однако, вы применяете рекурсивную операцию к матрице A:
A = A - f(i) = A - (prevA - f(i-1)) = ...
, что означает, что вы не можете применить все итерации одновременно, как это обычно делается при векторизации кода.Другими словами, на каждой итерации i
матрица A
зависит от матрицы A
на предыдущей итерации, и поэтому невозможно управлять всеми итерациями одновременно, используя предоставленное вами уравнение.