トレースにはつぎのようなの性質がある。
\begin{align}
\mathrm{tr} {A1} + \mathrm{tr}{A2} &= \mathrm{tr} ( A1+A2 ) \\
a\ \mathrm{tr} {A1} &= \mathrm{tr} (a\ A1) \\
\mathrm{tr} (A1 A2) &= \mathrm{tr} (A2 A1)
\end{align}
これが成り立つことをEigenで試す。
実行結果
35
35
48
48
248
248
ソースコード。
#include <iostream>
#include "../Eigen/Dense"
int main() {
double a = 3;
Eigen::Matrix3f sumA, A1A2, A2A1, A1, A2, B;
A1 << 1, 2, 3, 4, 5, 6, 7, 8, 10;
A2 << 1, 3, 6, 1, 8, 3, 7, 1, 10;
sumA = A1 + A2;
A1A2 = A1 * A2;
A2A1 = A2 * A1;
B = a * A1;
//trA1+trA2=tr(A1+A2)
std::cout << A1.trace() + A2.trace() << std::endl;
std::cout << sumA.trace() << std::endl;
std::cout << std::endl;
//a tr(A1)= tr(aA1)
std::cout << B.trace() << std::endl;
std::cout << a * A1.trace() << std::endl;
std::cout << std::endl;
//tr(A1 A2)= tr(A2 A1)
std::cout << A1A2.trace() << std::endl;
std::cout << A2A1.trace() << std::endl;
return 0;
}
コメント