C++でフロベニウスノルムを計算する

フロベニウスノルムは

\begin{align}
\| A \|_{F}=\sqrt{\sum_{i=1}^{m} \sum_{j=1}^{n} \left |a_{ij} \right |}
\end{align}

で計算できる。一次元配列に行列を放り込んで計算してみた。

実行結果

1,1,1,1,
1,1,1,1,


2.82843

ソースコード

#include <iostream>

void show(double*, int, int);
double Fnorm(double* x, int n, int m);

int main() {
	int m = 4, n = 2;
	double sum = 0;
	double* x;
	x = new double[m * n];

	for (int i = 0; i < m * n; i++) {
		x[i] = 1;
	}
	show(x, n, m);
	std::cout << std::endl;

	std::cout << Fnorm(x, n, m);


}
double Fnorm(double* x, int n, int m) {
	double norm = 0;

	for (int i = 0; i < n * m; i++) {
		norm += std::pow(x[i], 2);
		//std::cout << norm << std::endl;

	}
	std::cout << std::endl;

	return std::sqrt(norm);
}
void show(double* x,int n,int m) {
	int count = 0;
	for (int i = 0; i < m * n; i++) {
		count += 1;
		std::cout << x[i] << ",";
		if (count == m) {
			std::cout << std::endl;
			count = 0;
		}
	}
}

コメント

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