トレースにはつぎのようなの性質がある。
\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で試す。
実行結果
1 2 3 4 5 6 7 8 | 35 35 48 48 248 248 |
ソースコード。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #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; } |
コメント