История изменений
Исправление monk, (текущая версия) :
число слагаемых составит n*m*k*t, что при m>1 и t>1 неменьше n*k*(m+t);
Упс... считал для (1, 3) * (3, 3) * (3, 1)... на практике встретилось, тогда просто написал mult(a,b,c) — стало быстрей.
Правда, для общего случая, всё равно лучше видеть все матрицы одновременно (их размерность), так как вычислительная сложность очень сильно зависит от порядка вычислений. При прямом вычислении n*m*(k+t), при обратном (сначала BC) — m*t(k+n). Если n > k, то выгодней считать сначала BC.
что тебе мешает в C++ реализовать оператор умножения матриц, который вместо фактического умножения матриц
Ничего не мешает. Это и было бы красивым решением (бы, потому что никем, AFAIK, не реализовано). Но почти везде так не сделано. Например it++: http://itpp.sourceforge.net/current/classitpp_1_1Mat.html#af16d43ceaf7d535b12...
P.S. Нашёл, где сделано. http://arma.sourceforge.net/ Правда, судя по коду только до 4 матриц оптимизирует. И оптимизация моим вариантом — A*B*C*D превращается в mult(A,B,C,D). Зато эффект: http://arma.sourceforge.net/speed.html
Исходная версия monk, :
число слагаемых составит n*m*k*t, что при m>1 и t>1 неменьше n*k*(m+t);
Упс... считал для (1, 3) * (3, 3) * (3, 1)... просто на приактике встретилось, тогда просто написал mult(a,b,c) — стало быстрей.
Правда, для общего случая, всё равно лучше видеть все матрицы одновременно (их размерность), так как вычислительная сложность очень сильно зависит от порядка вычислений. При прямом вычислении n*m*(k+t), при обратном (сначала BC) — m*t(k+n). Если n > k, то выгодней считать сначала BC.
что тебе мешает в C++ реализовать оператор умножения матриц, который вместо фактического умножения матриц
Ничего не мешает. Это и было бы красивым решением (бы, потому что никем, AFAIK, не реализовано). Но почти везде так не сделано. Например it++: http://itpp.sourceforge.net/current/classitpp_1_1Mat.html#af16d43ceaf7d535b12...
P.S. Нашёл, где сделано. http://arma.sourceforge.net/ Правда, судя по коду только до 4 матриц оптимизирует. И оптимизация моим вариантом — A*B*C*D превращается в mult(A,B,C,D). Зато эффект: http://arma.sourceforge.net/speed.html