関数multiply_matrix3_mmm マニュアル

(The documentation of function multiply_matrix3_mmm)

Last Update: 2021/12/6


◆機能・用途(Purpose)

3つの行列の積を計算する。 3つともがstruct matrix型の場合用で、 関数名の「mmm」は matrix × matrix × matrix という意味である。
Calculate the product of three matrices. This function assumes that all the three matrices are represented by struct matrix type, and the function name “mmm” means matrix × matrix × matrix.


◆形式(Format)

#define MULTIPLY_MATRIX_VERBOSE 0 //→進行状況を表示したくない場合 (To suppress displaying the progress)
#include <matrix/operation.h>
inline struct matrix multiply_matrix3_mmm
(const struct matrix A,const struct matrix B,const struct matrix C)


◆引数(Arguments)

A 積の計算に用いる1つ目の行列\(\myvector{A}\)。
The first matrix \(\myvector{A}\) used in the calculation of the product.
B 積の計算に用いる2つ目の行列\(\myvector{B}\)。 行数は\(\myvector{A}\)の列数と等しくなければならない。
The second matrix \(\myvector{B}\) used in the calculation of the product. The number of rows of \(\myvector{B}\) must be equal to the number of columns of \(\myvector{A}\).
C 積の計算に用いる3つ目の行列\(\myvector{C}\)。 行数は\(\myvector{B}\)の列数と等しくなければならない。
The third matrix \(\myvector{C}\) used in the calculation of the product. The number of rows of \(\myvector{C}\) must be equal to the number of columns of \(\myvector{B}\).


◆戻り値(Return value)

行列\(\myvector{A}\myvector{B}\myvector{C}\)を表す構造体。 戻り値のメンバの値は以下のようになる。
A structure which represents a matrix \(\myvector{A}\myvector{B}\myvector{C}\). The values of members of the return value are as follows.

戻り値のメンバ
Member of the return value

Value
rowmax A.rowmax
columnmax C.columnmax
各\(i\), \(j\)に対するmain[i][j]
main[i][j] for each \(i\) and \(j\)
行列\(\myvector{A}\myvector{B}\myvector{C}\) の\((i,j)\)成分。
The \((i,j)\) component of matrix \(\myvector{A}\myvector{B}\myvector{C}\).
allocated ’y’


◆使用例(Example)

struct matrix A,B,C;
struct matrix D=multiply_matrix3_mmm(A,B,C);


◆補足(Additional notes)

行列の積の計算は時間がかかるのでデフォルトで進行状況を表示する仕様にしている。 進行状況を表示したくない場合はプログラムの冒頭に 「#define MULTIPLY_MATRIX_VERBOSE 0」と書く。
Since it takes time to compute the product of matrices, its progress is displayed by default. To suppress displaying the progress, write “#define MULTIPLY_MATRIX_VERBOSE 0” at the top of the program.


◆計算方法(Computation method)

関数multiply_matrix (matrix/operation.h)を2度呼び出すことにより、 \((\myvector{A}\myvector{B})\myvector{C}\) または \(\myvector{A}(\myvector{B}\myvector{C})\) のうち計算回数が少ない方の計算を行う。
Function multiply_matrix (matrix/operation.h) is called twice to calculate \((\myvector{A}\myvector{B})\myvector{C}\) or \(\myvector{A}(\myvector{B}\myvector{C})\) depending on the number of calculations.

行列\(\myvector{A}\)のサイズを\(N_1\times N_2\)、 \(\myvector{B}\)のサイズを\(N_2\times N_3\)、 \(\myvector{C}\)のサイズを\(N_3\times N_4\)とすると、 \((\myvector{A}\myvector{B})\myvector{C}\) の計算では\(N_1 N_2 N_3 + N_1 N_3 N_4\)回、 \(\myvector{A}(\myvector{B}\myvector{C})\) の計算では\(N_2 N_3 N_4 + N_1 N_2 N_4\)回の計算が必要になる。 したがって \(N_1 N_2 N_3 + N_1 N_3 N_4 \leq N_2 N_3 N_4 + N_1 N_2 N_4\) のときは\((\myvector{A}\myvector{B})\myvector{C}\)を計算し、 \(N_1 N_2 N_3 + N_1 N_3 N_4 > N_2 N_3 N_4 + N_1 N_2 N_4\) のときは\(\myvector{A}(\myvector{B}\myvector{C})\)を計算する。
Let the sizes of matrices \(\myvector{A}\), \(\myvector{B}\), and \(\myvector{C}\) be \(N_1\times N_2\), \(N_2\times N_3\), and \(N_3\times N_4\), respectively. Then the numbers of calculations needed are \(N_2 N_3 N_4 + N_1 N_2 N_4\) for a calculation of \((\myvector{A}\myvector{B})\myvector{C}\), and \(N_2 N_3 N_4 + N_1 N_2 N_4\) for a calculation of \(\myvector{A}(\myvector{B}\myvector{C})\). Therefore the function chooses \((\myvector{A}\myvector{B})\myvector{C}\) in case of \(N_1 N_2 N_3 + N_1 N_3 N_4 \leq N_2 N_3 N_4 + N_1 N_2 N_4\), and \(\myvector{A}(\myvector{B}\myvector{C})\) otherwise.