HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > 計算物理学

【GSLで数値計算4】
行列の積の計算

文責:遠藤 理平 (2018年6月30日) カテゴリ:計算物理学(165)

本稿では、GSL(GNU科学技術計算ライブラリ)を用いて行列の積を行うサンプルプログラムを示します。→ GNU科学技術計算ライブラリのインストール(Windows, VisualStudio2017)はこちら

 
////////////////////////////////////////////////////////////////////////
// 行列の積と和の計算
////////////////////////////////////////////////////////////////////////
//https://www.gnu.org/software/gsl/doc/html/linalg.html#examples

#include 
#include 
#include 
#include 
#include 

int main(void) {

	// 行列の準備
	double a_data[] = { 
		0.11, 0.12, 0.13,
		0.21, 0.22, 0.23 
	};
	double b_data[] = {
		1011, 1012,
		1021, 1022,
		1031, 1032 
	};
	double c_data[] = { 
		0.00, 0.00,
		0.00, 0.00 
	};

	//GSL行列インスタンスの生成
	gsl_matrix_view A = gsl_matrix_view_array(a_data, 2, 3);
	gsl_matrix_view B = gsl_matrix_view_array(b_data, 3, 2);
	gsl_matrix_view C = gsl_matrix_view_array(c_data, 2, 2);

	// C= \alpha {\rm op}(A) {\rm op}(B) + \beta C
	gsl_blas_dgemm(
		CblasNoTrans, // 行列Aの変換 {\rm op}(A)(※1)
		CblasNoTrans, // 行列Bの変換 {\rm op}(B)(※1) 
		1.0,          // alpha
		&A.matrix,    // A
		&B.matrix,    // B
		0.0,          // beta
		&C.matrix     // 戻り値
	);
	//(※1)変換なし:CblasNoTrans, 転置:CblasTrans, エルミート転置:CblasConjTrans

	//計算結果の表示
	std::cout << "計算結果の表示1" << std::endl;
	std::cout << "[ " << C.matrix.data[0] << " " << C.matrix.data[1] << std::endl;
	std::cout << "  " << C.matrix.data[2] << " " << C.matrix.data[3] << " ]" << std::endl;

	std::cout << "計算結果の表示2" << std::endl;
	std::cout << "[ " << c_data[0] << " " << c_data[1] << std::endl;
	std::cout << "  " << c_data[2] << " " << c_data[3] << " ]" << std::endl;

	std::string s;
	std::cin >> s;
	return 0;
}

実行結果

20180625-2.png

(※)計算結果を格納するC.matrix.dataとCを生成するために準備した配列c_dataは同じメモリを参照しています。



タグ: ,

▲このページのトップNPO法人 natural science トップ

▲このページのトップNPO法人 natural science トップ




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました