FineKernelToolKit  2.8.10
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 の行列を返します。
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義