У меня есть следующий код в MatLab, который я хотел бы портировать на C ++ в идеале с собственной библиотекой:
N(:,i)=2.^L(:,i)+1;
Где L — симметричная матрица (1,2; 2,1), а диагональные элементы — все одно.
В собственной (не поддерживается) я отмечаю, что есть функция для вычисления экспоненты матрицы, но нет функции для поднятия произвольного скаляра до степени матрицы.
http://eigen.tuxfamily.org/dox-devel/unsupported/group__MatrixFunctions__Module.html#matrixbase_exp
Есть что-то, чего мне не хватает?
Если вы действительно хотите поднять произвольный скаляр до степени матрицы, вы должны использовать тождество a^x = exp(log(a)*x)
,
Тем не менее, Matlab .^
Оператор вычисляет поэлементную мощность. Если вы хотите то же самое в Eigen, используйте соответствующий Array
функциональность:
N.col(i) = pow(2.0, L.col(i).array()) + 1.0;
Помните, что Eigen начинает индексировать с 0, а Matlab начинается с 1, поэтому вам может потребоваться заменить i
от i-1
,
Других решений пока нет …