2016-04-15 5 views
4

Мне нужно вычислить мощность некоторой матрицы, а затем получить ее собственные векторы. Я знаю, что существует метод pow(), но для меня неясно, как его использовать.Как вычислить мощность матрицы, используя Eigen library?

На данный момент мой код:

Eigen::Matrix3d mat2 = mat1.pow(0.5); 
return getEigenvalues(mat2); 

Метод getEigenvalues ​​() принимает тип Эйген :: Matrix, который не какие Pow() возвращает.

ответ

2

Это неправильный порядок операций. Вы сначала вычисляете собственные значения, а затем оцениваете их.

Причина в том, что собственные значения экспоненциальной матрицы равны экспоненциальным собственным значениям исходной матрицы. EDIT: если существуют собственные значения исходной матрицы.

Так, например, чтобы получить собственные значения вашей матрицы mat2 Вы пишете:

Eigen::VectorXd ev = getEigenvalues(mat1).unaryExpr([](double d) {return std::pow(d, 0.5);}); 

В случае показателя на половину, вы можете лучше использовать std::sqrt.


Я забыл упомянуть, что собственные векторы идентичны для оригинала и возведенной в степень матрицы, см here, например.

+0

Но мне нужны собственные векторы, а не собственные значения. –

+0

Собственные векторы идентичны для оригинальной и экспоненциальной матрицы. Я сделал редактирование. – davidhigh

Смежные вопросы