FineKernelToolKit  2.9.0
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義 ページ
Public メソッド | すべてのメンバ一覧
クラス fk_GenMatrix

任意次元正方行列を管理するクラス [詳細]

Public メソッド

 fk_GenMatrix (int deg=0)
 コンストラクタ [詳細]
 
 fk_GenMatrix (const fk_GenMatrix &)
 コピーコンストラクタ [詳細]
 
単項演算子
fk_GenMatrix operator! (void) const
 逆行列取得演算子 [詳細]
 
比較演算子
bool operator== (const fk_GenMatrix &) const
 同値比較演算子 [詳細]
 
bool operator!= (const fk_GenMatrix &) const
 異値比較演算子 [詳細]
 
代入演算子
fk_GenMatrixoperator= (const fk_GenMatrix &)
 単純代入演算子 [詳細]
 
fk_GenMatrixoperator+= (const fk_GenMatrix &)
 行列和代入演算子 [詳細]
 
fk_GenMatrixoperator-= (const fk_GenMatrix &)
 行列差代入演算子 [詳細]
 
fk_GenMatrixoperator*= (const fk_GenMatrix &)
 行列積代入演算子 [詳細]
 
メンバ関数
void init (bool initFlg=true)
 初期化関数 [詳細]
 
void setDeg (int deg)
 次元数設定関数 [詳細]
 
int getDeg (void) const
 次元数取得関数 [詳細]
 
void set (int row, int col, double value)
 成分値設定関数 [詳細]
 
double get (int row, int col) const
 成分値取得関数 [詳細]
 
bool inverse (void)
 逆行列化関数 [詳細]
 
void negate (void)
 転置化関数 [詳細]
 
bool isRegular (void) const
 正則判定関数 [詳細]
 
bool isSingular (void) const
 特異判定関数 [詳細]
 

フレンド

二項演算子
fk_GenVector operator* (const fk_GenMatrix &, const fk_GenVector &)
 ベクトル変換二項演算子 [詳細]
 
fk_GenMatrix operator+ (const fk_GenMatrix &, const fk_GenMatrix &)
 行列和二項演算子 [詳細]
 
fk_GenMatrix operator- (const fk_GenMatrix &, const fk_GenMatrix &)
 行列差二項演算子 [詳細]
 
fk_GenMatrix operator* (const fk_GenMatrix &, const fk_GenMatrix &)
 行列積二項演算子 [詳細]
 

説明

任意次元正方行列を管理するクラス

このクラスは、任意次元の正方行列に関する様々な機能を提供します。 最も重要な機能は、 fk_GenVector クラスと合わせた行列演算による連立方程式の計算です。 4元以下の行列演算については、 fk_Matrix を利用した方が高速です。

参照
fk_GenVector, fk_Matrix, fk_Vector, fk_HVector

コンストラクタとデストラクタ

fk_GenMatrix::fk_GenMatrix ( int  deg = 0)

コンストラクタ

引数で与えられた次元数の単位正方行列を生成します。

引数
[in]deg次元数
fk_GenMatrix::fk_GenMatrix ( const fk_GenMatrix )

コピーコンストラクタ

関数

fk_GenMatrix fk_GenMatrix::operator! ( void  ) const

逆行列取得演算子

以下のコードは、M_org の逆行列を M_new に代入します。

M_new = !M_org;

このとき、M_org は変化しません。 もし M_org が特異行列であった場合は、M_new は M_org と同値となります。

bool fk_GenMatrix::operator== ( const fk_GenMatrix ) const

同値比較演算子

fk_GenMatrix では、以下のように記述することで、 M1 と M2 が等しいかどうかを判断できます。

if(M1 == M2) {
    :
    :
}

ここでの比較は、各成分の比較において FK_MATRIX_EPS までの数値誤差を許容しています。 次元数が異なる場合は、無条件に偽となります。

bool fk_GenMatrix::operator!= ( const fk_GenMatrix ) const

異値比較演算子

fk_GenMatrix では、以下のように記述することで、 M1 と M2 が等しくないかどうかを判断できます。

if(M1 != M2) {
    :
    :
}

ここでの比較は、各成分の比較において FK_MATRIX_EPS までの数値誤差を許容しています。 次元数が異なる場合は、無条件に真となります。

fk_GenMatrix& fk_GenMatrix::operator= ( const fk_GenMatrix )

単純代入演算子

fk_GenMatrix& fk_GenMatrix::operator+= ( const fk_GenMatrix )

行列和代入演算子

以下のコードは、M1 と M2 の行列和を 前の M1 の値は破棄して改めて M1 に設定します。

M1 += M2;

これは、以下のコードと同義です。

M1 = M1 + M2;

M1 と M2 の次元数が異なる場合は、M1 は変化しません。

fk_GenMatrix& fk_GenMatrix::operator-= ( const fk_GenMatrix )

行列差代入演算子

以下のコードは、M1 と M2 の行列差を 前の M1 の値は破棄して改めて M1 に設定します。

M1 -= M2;

これは、以下のコードと同義です。

M1 = M1 - M2;

M1 と M2 の次元数が異なる場合は、M1 は変化しません。

fk_GenMatrix& fk_GenMatrix::operator*= ( const fk_GenMatrix )

行列積代入演算子

以下のコードは、M1 と M2 の行列積を 前の M1 の値は破棄して改めて M1 に設定します。

M1 *= M2;

これは、以下のコードと同義です。

M1 = M1 * M2;
覚え書き
行列積は交換法則が成り立たないため、 $ \mathbf{M}_2\mathbf{M}_1 $$ \mathbf{M}_1 $ に代入したいときには、この演算子は利用できません。

M1 と M2 の次元数が異なる場合は、M1 は変化しません。

void fk_GenMatrix::init ( bool  initFlg = true)

初期化関数

行列を、引数の値に従って初期化を行います。 次元数は変化しません。

引数
[in]initFlgtrue の場合、単位行列として初期化します。 false の場合、零行列として初期化します。
void fk_GenMatrix::setDeg ( int  deg)

次元数設定関数

行列の次元数を設定します。 各成分の値は可能な限り引き継がれます。

引数
[in]deg次元数
int fk_GenMatrix::getDeg ( void  ) const

次元数取得関数

次元数を取得します。

戻り値
次元数
void fk_GenMatrix::set ( int  row,
int  col,
double  value 
)

成分値設定関数

引数に対応する成分の値を設定します。

引数
[in]row行番号。0から始まります。
[in]col列番号。0から始まります。
[in]value設定値。
double fk_GenMatrix::get ( int  row,
int  col 
) const

成分値取得関数

引数に対応する成分を取得します。

引数
[in]row行番号。0から始まります。
[in]col列番号。0から始まります。
戻り値
成分値
bool fk_GenMatrix::inverse ( void  )

逆行列化関数

現在設定されている行列に対し、正則行列であれば自身を逆行列化します。 特異(非正則)行列である場合は「失敗」とし、成分値を変更しません。

戻り値
行列が正則である場合、逆行列化して true を返します。 特異行列であった場合は、成分値を変更せずに false を返します。
参照
isRegular(), isSingular()
void fk_GenMatrix::negate ( void  )

転置化関数

現在設定されている行列に対し、自身を転置化します。

bool fk_GenMatrix::isRegular ( void  ) const

正則判定関数

行列が正則であるかどうかを判定します。 正則行列とは、逆行列が存在する行列のことです。

戻り値
正則であれば true を、そうでなければ false を返します。
参照
inverse(), isSingular()
bool fk_GenMatrix::isSingular ( void  ) const

特異判定関数

行列が特異であるかどうかを判定します。 特異行列とは、逆行列が存在しない行列のことです。 これは「非正則行列」と同義になります。

戻り値
特異であれば true を、そうでなければ false を返します。
参照
inverse(), isRegular()

フレンドと関連する関数

fk_GenVector operator* ( const fk_GenMatrix ,
const fk_GenVector  
)
friend

ベクトル変換二項演算子

任意次元ベクトル V1 の、行列 M による変換ベクトル V2 を求めるには、 以下のように記述します。 V1, V2 は共に fk_GenVector 型の変数で、M は fk_GenMatrix 型の変数です。

V2 = M * V1;

FK では行列体系として MV 系を採用しており、 行列のベクトル変換の際には行列が左側、ベクトルが右側である必要があります。 なお、この演算では M と V1 の次元数が同一である必要があります。 もし次元数が異なった場合は、次元が 0 のベクトルを返します。

fk_GenMatrix operator+ ( const fk_GenMatrix ,
const fk_GenMatrix  
)
friend

行列和二項演算子

行列 M1, M2 の行列和 M3 を求めるには、 以下のように記述します。 M1, M2, M3 はいずれも fk_GenMatrix 型です。

M3 = M1 + M2;
覚え書き
行列和は交換法則が成り立ちます。 なお、この演算では M1 と M2 の次元数が同一である必要があります。 もし次元数が異なった場合は、次元が 0 の行列を返します。
fk_GenMatrix operator- ( const fk_GenMatrix ,
const fk_GenMatrix  
)
friend

行列差二項演算子

行列 M1, M2 の行列差 M3 を求めるには、 以下のように記述します。 M1, M2, M3 はいずれも fk_GenMatrix 型です。

M3 = M1 - M2;
覚え書き
行列差は交換法則は成り立ちません。 なお、この演算では M1 と M2 の次元数が同一である必要があります。 もし次元数が異なった場合は、次元が 0 の行列を返します。
fk_GenMatrix operator* ( const fk_GenMatrix ,
const fk_GenMatrix  
)
friend

行列積二項演算子

行列 M1, M2 の行列積 M3 を求めるには、 以下のように記述します。 M1, M2, M3 はいずれも fk_GenMatrix 型の変数です。

M3 = M1 * M2;
覚え書き
行列積は交換法則が成り立たないため、 $ \mathbf{M}_1\mathbf{M}_2 $$ \mathbf{M}_2\mathbf{M}_1 $ は一般的に結果が異なります。 なお、この演算では M1 と M2 の次元数が同一である必要があります。 もし次元数が異なった場合は、次元が 0 の行列を返します。