トレースとフロベニウスノルムの関係

\(A\)と\(A\)の転地の積のトレースはフロベニウスノルムの二乗と等しくなる。つまり

\begin{align}
\mathrm{tr} (A A^{T}) = \mathrm{tr} (A^{T} A) = \sum_{i=1}^{n}\sum_{j=1}^{m} a_{ij}^2
\end{align}

フロベニウスノルムは

\begin{align}
\| A \|_F = \sqrt{\sum_{i=1}^{n}\sum_{j=1}^{m} a_{ij}^2}
\end{align}

これが成り立つことをEigenで試す。

実行結果

304
304
304

フロベニウスノルム->17.4356

ソースコード。

#include <iostream>
#include "../Eigen/Dense"

int main() {
	const int n = 3;
	const int m = 3;
	double Fsum = 0;

	Eigen::MatrixXf A(n,m), B1(n, m), B2(n, m);
	
	A << 1, 2, 3, 4, 5, 6, 7, 8, 10;
	B1 = A * A.transpose();
	B2 = A.transpose() * A;

	for (int i = 0; i < n; i++) {
		for(int j = 0; j < m; j++) {
			Fsum += std::pow(A(i, j), 2);
		}
	}
	
	std::cout << B1.trace() << std::endl;
	std::cout << B2.trace() << std::endl;
	std::cout << Fsum << std::endl;
	std::cout << std::endl;

	std::cout << "フロベニウスノルム->" << sqrt(Fsum) << std::endl;

	return 0;
}

コメント

タイトルとURLをコピーしました