Введение
Ввиду того, что при решении задач оптимизации, дифференциальных игр, и в 2D и 3D расчётах, а вернее при написании софта, который проводит вычисления для их решения одними из наиболее часто выполняемых операций являются векторно-матричные преобразования типа
, где
— скалярные значения,
— вектора или матрицы размерности
.
Собственно вот такие:

(источник).
Так, чтобы не углубляться в теорию оптимизации за примерами достаточно вспомнить формулу численного интегрирования Рунге-Кутты четвёртого порядка:

где
— очередное значение интегрируемой функции
— шаг метода, а
,
— значения интегрируемой функции в некоторых промежуточных точках — в общем случае векторах.
Как можно заметить основную массу математических операций как для векторов, так и для матриц составляют:
- сложение и вычитание — более быстрые;
- умножение и деление — более медленные.
О сложности вычислений хорошо написано в соответствующем курсе МФТИ.
Помимо этого, довольно существенные расходы при реализации векторных вычислений приходятся на операции управления памятью — создание и уничтожение массивов представляющих собой матрицы и вектора.
Соответственно есть смысл заняться снижением количества операций привносящих наибольшую сложность — умножения (математика) и операции управления памятью (алгоритмика).
Читать полностью »