FineKernelToolKit: FK::fk_GenVector クラス

FineKernelToolKit 4.3.0

読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | 全メンバ一覧
FK::fk_GenVector クラス

任意次元ベクトルを管理するクラス [詳解]

`#include <FK/GenVector.h>`

## 公開メンバ関数

| fk_GenVector (int deg=0)
| コンストラクタ1
| fk_GenVector (std::vector< double > &array)
| コンストラクタ2
| fk_GenVector (int deg, double *array)
| コンストラクタ3
| fk_GenVector (const fk_GenVector &)
| コピーコンストラクタ
| fk_GenVector (const fk_Vector &)
| fk_Vector からのコピーコンストラクタ
| fk_GenVector (const fk_HVector &)
| fk_HVector からのコピーコンストラクタ
単項演算子
fk_GenVector & | operator- (void) const
| 単項マイナス演算子
比較演算子
bool | operator== (const fk_GenVector &) const
| 同値比較演算子
bool | operator!= (const fk_GenVector &) const
| 異値比較演算子
代入演算子
fk_GenVector & | operator= (const fk_GenVector &)
| 単純代入演算子
fk_GenVector & | operator= (const fk_Vector &)
| fk_Vector 型からの単純代入演算子
fk_GenVector & | operator= (const fk_HVector &)
| fk_HVector 型からの単純代入演算子
fk_GenVector & | operator*= (double d)
| 実数積演算子
fk_GenVector & | operator/= (double)
| 実数商代入演算子
fk_GenVector & | operator+= (const fk_GenVector &)
| 単項和代入演算子
fk_GenVector & | operator-= (const fk_GenVector &)
| 単項差代入演算子
fk_GenVector & | operator*= (const fk_GenMatrix &)
| 行列変換代入演算子
メンバ関数
void | resize (int deg)
| 次元数設定関数
bool | set (int ID, double value)
int | size (void) const
| 次元数取得関数
double | get (int ID) const
| 成分値取得関数
double | norm (void) const
| ノルム取得関数
double | norm2 (void) const
| ノルム平方値取得関数
bool | normalize (void)
| 正規化関数
void | init (bool degFlg=false)
| 初期化関数
bool | isZero (void) const
| 零ベクトル判定関数
bool | replace (int s, fk_GenVector &Q)
| 部分置換関数1
bool | replace (int s, fk_Vector &Q)
| 部分置換関数2
bool | replace (int s, fk_HVector &Q)
| 部分置換関数3
bool | add (int s, fk_GenVector &Q)
| 部分加算関数1
bool | add (int s, fk_Vector &Q)
| 部分加算関数2
bool | add (int s, fk_HVector &Q)
| 部分加算関数3
bool | sub (int s, fk_GenVector &Q)
| 部分減算関数1
bool | sub (int s, fk_Vector &Q)
| 部分減算関数2
bool | sub (int s, fk_HVector &Q)
| 部分減算関数3
fk_GenVector | div (int s, int e)
| 部分抽出関数

## 詳解

任意次元ベクトルを管理するクラス

このクラスは、任意次元ベクトルの様々な機能を提供します。 このクラス単体でも、線形空間におけるベクトルの様々な演算を利用することができます。 最も重要な機能は、 fk_GenMatrix クラスと合わせた行列演算による連立方程式の計算です。 4元以下の行列演算については、 fk_Matrix を利用した方が高速です。

参照
  fk_GenMatrix, fk_Vector, fk_HVector, fk_Matrix

## 構築子と解体子

## ◆ fk_GenVector() [1/6]

FK::fk_GenVector::fk_GenVector | ( | int | deg = 0 | ) |

コンストラクタ1

次元数のみを指定するコンストラクタです。 全ての成分に 0 が設定されます。 引数を省略した場合、 次元数が 0 である (つまり成分のない)ベクトルを生成します。

引数

  [in] | deg | 次元数

## ◆ fk_GenVector() [2/6]

FK::fk_GenVector::fk_GenVector | ( | std::vector< double > & | array | ) |

コンストラクタ2

このコンストラクタでは、 引数として STL の vector<double> 型配列を入力とします。

引数

  [in] | array | 成分値配列

## ◆ fk_GenVector() [3/6]

FK::fk_GenVector::fk_GenVector | ( | int | deg,
|  | double * | array )

コンストラクタ3

このコンストラクタでは、 引数として次元数と double 型配列を入力とします。

引数

  [in] | deg | 次元数
  [in] | array | 成分値配列

## ◆ fk_GenVector() [4/6]

FK::fk_GenVector::fk_GenVector | ( | const fk_GenVector & |  | ) |

コピーコンストラクタ

## ◆ fk_GenVector() [5/6]

FK::fk_GenVector::fk_GenVector | ( | const fk_Vector & |  | ) |

fk_Vector からのコピーコンストラクタ

## ◆ fk_GenVector() [6/6]

FK::fk_GenVector::fk_GenVector | ( | const fk_HVector & |  | ) |

fk_HVector からのコピーコンストラクタ

## 関数詳解

## ◆ operator-()

fk_GenVector & FK::fk_GenVector::operator- | ( | void |  | ) | const

単項マイナス演算子

fk_GenVector では、以下のように記述することで、v2 に -v1 を代入できます。 全ての成分の符号が反転します。 v2 の次元数は v1 と同じに設定されます。

    v2 = -v1;

## ◆ operator==()

bool FK::fk_GenVector::operator== | ( | const fk_GenVector & |  | ) | const

同値比較演算子

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

    if(v1 == v2) {
        :
        :
    }

ここでの比較は、ある程度の計算誤差を許容します。 次元数が異なる場合は、成分値にかかわらず偽となります。

## ◆ operator!=()

bool FK::fk_GenVector::operator!= | ( | const fk_GenVector & |  | ) | const

異値比較演算子

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

    if(v1 != v2) {
        :
        :
    }

ここでの比較は、ある程度の計算誤差を許容します。 次元数が異なる場合は、成分値にかかわらず真となります。

## ◆ operator=() [1/3]

fk_GenVector & FK::fk_GenVector::operator= | ( | const fk_GenVector & |  | ) |

単純代入演算子

## ◆ operator=() [2/3]

fk_GenVector & FK::fk_GenVector::operator= | ( | const fk_Vector & |  | ) |

fk_Vector 型からの単純代入演算子

## ◆ operator=() [3/3]

fk_GenVector & FK::fk_GenVector::operator= | ( | const fk_HVector & |  | ) |

fk_HVector 型からの単純代入演算子

## ◆ operator*=() [1/2]

fk_GenVector & FK::fk_GenVector::operator*= | ( | double | d | ) |

実数積演算子

以下のコードは、ベクトル V の成分全てを d 倍します。 V は fk_GenVector 型の変数、d は double 型の変数です。

    V *= d;

d は変数でなく数値でも構いません。

    V *= 2.0;

## ◆ operator/=()

fk_GenVector & FK::fk_GenVector::operator/= | ( | double |  | ) |

実数商代入演算子

以下のコードは、ベクトル V の成分全てを 1/d 倍します。 V は fk_GenVector 型の変数、d は double 型の変数です。

    V /= d;

d は変数でなく数値でも構いません。

    V /= 2.0;

なお、d が 0 であった場合は V の値を変更しません。

## ◆ operator+=()

fk_GenVector & FK::fk_GenVector::operator+= | ( | const fk_GenVector & |  | ) |

単項和代入演算子

以下のコードは、V1 に V2 を追加します。 V1、V2 はいずれも fk_GenVector 型の変数です。

    V1 += V2;

上記コードは、以下のコードと同義です。

    V1 = V1 + V2;

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

## ◆ operator-=()

fk_GenVector & FK::fk_GenVector::operator-= | ( | const fk_GenVector & |  | ) |

単項差代入演算子

以下のコードは、V1 から V2 を引きます。 V1、V2 はいずれも fk_Vector 型の変数です。

    V1 -= V2;

上記コードは、以下のコードと同義です。

    V1 = V1 - V2;

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

## ◆ operator*=() [2/2]

fk_GenVector & FK::fk_GenVector::operator*= | ( | const fk_GenMatrix & |  | ) |

行列変換代入演算子

以下のコードは、ベクトル V を 行列 M によって変換した値を代入します。 V は fk_GenVector 型の変数、M は fk_GenMatrix 型の変数です。

    V *= M;

上記コードは、以下のコードと同義です。

    V = M * V;

もし V と M の次元数が異なる場合、V の値は変化しません。

## ◆ resize()

void FK::fk_GenVector::resize | ( | int | deg | ) |

次元数設定関数

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

引数

  [in] | deg | 次元数

## ◆ set()

bool FK::fk_GenVector::set | ( | int | ID,
|  | double | value )

成分値を設定します。 id は最初の成分が 0 になります。 id が次元数に対して不正であった場合は失敗となります。

引数

  [in] | ID | 成分のID
  [in] | value | 設定値

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ size()

int FK::fk_GenVector::size | ( | void |  | ) | const

次元数取得関数

次元数を取得します。

戻り値
  次元数

## ◆ get()

double FK::fk_GenVector::get | ( | int | ID | ) | const

成分値取得関数

引数に対応する成分を取得します。 最初の成分 ID は 0 です。

引数

  [in] | ID | 成分のID

戻り値
  対応する成分値。ID が不正であった場合は無条件に 0.0 を返します。

## ◆ norm()

double FK::fk_GenVector::norm | ( | void |  | ) | const

ノルム取得関数

ベクトルのノルムを取得します。 ノルムは、次元数 n のベクトル \( \mathbf{V} = (V_0, \; V_1, \; \ldots, \; V_{n-1}) \) に対し、以下の式で算出します。

\[ |\mathbf{V}| = \sqrt{\sum_{i=0}^{n-1} (V_i)^2} \]

戻り値
  ノルム

参照
  norm2(), normalize()

## ◆ norm2()

double FK::fk_GenVector::norm2 | ( | void |  | ) | const

ノルム平方値取得関数

ベクトルのノルムの平方値を取得します。 ノルムは、次元数 n のベクトル \( \mathbf{V} = (V_0, \; V_1, \; \ldots, \; V_{n-1}) \) に対し、以下の式で算出します。

\[ |\mathbf{V}|^2 = \sum_{i=0}^{n-1} (V_i)^2 \]

戻り値
  ノルム平方値

参照
  norm(), normalize()

## ◆ normalize()

bool FK::fk_GenVector::normalize | ( | void |  | ) |

正規化関数

ベクトルの正規化を行います。 正規化とは、ベクトル \( \mathbf{V} \) に対し、 以下の演算で \( \mathbf{V}' \) を求めることです。

\[ \mathbf{V}' = \frac{\mathbf{V}}{|\mathbf{V}|} \]

戻り値
  成功した場合 true を、失敗した場合 false を返します。 「失敗」は、元のベクトルが零ベクトルであるか、 次元数が 0 の場合に起こります。

参照
  dist()

## ◆ init()

void FK::fk_GenVector::init | ( | bool | degFlg = false | ) |

初期化関数

ベクトルの初期化を行います。

引数

  [in] | degFlg | true の場合は、次元数を 0 に設定します。 false の場合は、次元数は変化せず、全ての成分を 0 にします。

## ◆ isZero()

bool FK::fk_GenVector::isZero | ( | void |  | ) | const

零ベクトル判定関数

ベクトルが零ベクトルであるかどうかを判定します。

戻り値
  零ベクトルである場合 true を、そうでない場合 false を返します。 次元数が 0 である場合は true を返します。

## ◆ replace() [1/3]

bool FK::fk_GenVector::replace | ( | int | s,
|  | fk_GenVector & | Q )

部分置換関数1

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる m 次元ベクトル

\[ \mathbf{Q} = (Q_0, \; Q_1, \; \ldots, \; Q_{m-1}) \]

について、 \( \mathbf{P} \) の m 個の成分

\[ P_{s}, \; P_{s+1}, \; \ldots, \; P_{s+m-1} \]

を \( \mathbf{Q} \) の各成分に置き換えます。 条件として、 \( s \geq 0 \) かつ \( n \geq s + m - 1 \) を満たしている必要があります。

引数

  [in] | s | 置換する最初の成分 ID
  [in] | Q | 置換ベクトル

戻り値
  置換に成功した場合 true を、失敗した場合 false を返します。

## ◆ replace() [2/3]

bool FK::fk_GenVector::replace | ( | int | s,
|  | fk_Vector & | Q )

部分置換関数2

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる 3 次元ベクトル

\[ \mathbf{Q} = (Q_x, \; Q_y, \; Q_z) \]

について、 \( \mathbf{P} \) の 3 個の成分

\[ P_s, \; P_{s+1}, \; P_{s+2} \]

を \( Q_x, Q_y, Q_z \) の各成分に置き換えます。 条件として、 \( s \geq 0 \) かつ \( n \geq s + 2 \) を満たしている必要があります。

引数

  [in] | s | 置換する最初の成分 ID
  [in] | Q | 置換ベクトル

戻り値
  置換に成功した場合 true を、失敗した場合 false を返します。

## ◆ replace() [3/3]

bool FK::fk_GenVector::replace | ( | int | s,
|  | fk_HVector & | Q )

部分置換関数3

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる 4 次元ベクトル

\[ \mathbf{Q} = (Q_x, \; Q_y, \; Q_z, \; Q_w) \]

について、 \( \mathbf{P} \) の 4 個の成分

\[ P_s, \; P_{s+1}, \; P_{s+2}, \; P_{s+3} \]

を \( Q_x, Q_y, Q_z, Q_w \) の各成分に置き換えます。 条件として、 \( s \geq 0 \) かつ \( n \geq s + 3 \) を満たしている必要があります。

引数

  [in] | s | 置換する最初の成分 ID
  [in] | Q | 置換ベクトル

戻り値
  置換に成功した場合 true を、失敗した場合 false を返します。

## ◆ add() [1/3]

bool FK::fk_GenVector::add | ( | int | s,
|  | fk_GenVector & | Q )

部分加算関数1

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる m 次元ベクトル

\[ \mathbf{Q} = (Q_0, \; Q_1, \; \ldots, \; Q_{m-1}) \]

について、 \( \mathbf{P} \) の m 個の成分

\[ P_{s}, \; P_{s+1}, \; \ldots, \; P_{s+m-1} \]

に対して \( \mathbf{Q} \) の各成分の値を加算します。 条件として、 \( s \geq 0 \) かつ \( n \geq s + m - 1 \) を満たしている必要があります。

引数

  [in] | s | 加算する最初の成分 ID
  [in] | Q | 加算ベクトル

戻り値
  加算に成功した場合 true を、失敗した場合 false を返します。

## ◆ add() [2/3]

bool FK::fk_GenVector::add | ( | int | s,
|  | fk_Vector & | Q )

部分加算関数2

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる 3 次元ベクトル

\[ \mathbf{Q} = (Q_x, \; Q_y, \; Q_z) \]

について、 \( \mathbf{P} \) の 3 個の成分

\[ P_s, \; P_{s+1}, \; P_{s+2} \]

に対して \( Q_x, Q_y, Q_z \) の各成分の値を加算します。 条件として、 \( s \geq 0 \) かつ \( n \geq s + 2 \) を満たしている必要があります。

引数

  [in] | s | 加算する最初の成分 ID
  [in] | Q | 加算ベクトル

戻り値
  加算に成功した場合 true を、失敗した場合 false を返します。

## ◆ add() [3/3]

bool FK::fk_GenVector::add | ( | int | s,
|  | fk_HVector & | Q )

部分加算関数3

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる 4 次元ベクトル

\[ \mathbf{Q} = (Q_x, \; Q_y, \; Q_z, \; Q_w) \]

について、 \( \mathbf{P} \) の 4 個の成分

\[ P_s, \; P_{s+1}, \; P_{s+2}, \; P_{s+3} \]

に対して \( Q_x, Q_y, Q_z, Q_w \) の各成分の値を加算します。 条件として、 \( s \geq 0 \) かつ \( n \geq s + 3 \) を満たしている必要があります。

引数

  [in] | s | 加算する最初の成分 ID
  [in] | Q | 加算ベクトル

戻り値
  加算に成功した場合 true を、失敗した場合 false を返します。

## ◆ sub() [1/3]

bool FK::fk_GenVector::sub | ( | int | s,
|  | fk_GenVector & | Q )

部分減算関数1

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる m 次元ベクトル

\[ \mathbf{Q} = (Q_0, \; Q_1, \; \ldots, \; Q_{m-1}) \]

について、 \( \mathbf{P} \) の m 個の成分

\[ P_{s}, \; P_{s+1}, \; \ldots, \; P_{s+m-1} \]

に対して \( \mathbf{Q} \) の各成分の値を減算します。 条件として、 \( s \geq 0 \) かつ \( n \geq s + m - 1 \) を満たしている必要があります。

引数

  [in] | s | 減算する最初の成分 ID
  [in] | Q | 減算ベクトル

戻り値
  減算に成功した場合 true を、失敗した場合 false を返します。

## ◆ sub() [2/3]

bool FK::fk_GenVector::sub | ( | int | s,
|  | fk_Vector & | Q )

部分減算関数2

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる 3 次元ベクトル

\[ \mathbf{Q} = (Q_x, \; Q_y, \; Q_z) \]

について、 \( \mathbf{P} \) の 3 個の成分

\[ P_s, \; P_{s+1}, \; P_{s+2} \]

に対して \( Q_x, Q_y, Q_z \) の各成分の値を加算します。 条件として、 \( s \geq 0 \) かつ \( n \geq s + 2 \) を満たしている必要があります。

引数

  [in] | s | 減算する最初の成分 ID
  [in] | Q | 減算ベクトル

戻り値
  減算に成功した場合 true を、失敗した場合 false を返します。

## ◆ sub() [3/3]

bool FK::fk_GenVector::sub | ( | int | s,
|  | fk_HVector & | Q )

部分減算関数3

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる 4 次元ベクトル

\[ \mathbf{Q} = (Q_x, \; Q_y, \; Q_z, \; Q_w) \]

について、 \( \mathbf{P} \) の 4 個の成分

\[ P_s, \; P_{s+1}, \; P_{s+2}, \; P_{s+3} \]

に対して \( Q_x, Q_y, Q_z, Q_w \) の各成分の値を加算します。 条件として、 \( s \geq 0 \) かつ \( n \geq s + 3 \) を満たしている必要があります。

引数

  [in] | s | 減算する最初の成分 ID
  [in] | Q | 減算ベクトル

戻り値
  減算に成功した場合 true を、失敗した場合 false を返します。

## ◆ div()

fk_GenVector FK::fk_GenVector::div | ( | int | s,
|  | int | e )

部分抽出関数

ID が s から e までの成分値を持つ部分ベクトルを抽出します。 条件として、 \( 0 \leq s < e < n \) である必要があります。n は元ベクトルの次元数です。

引数

  [in] | s | 抽出開始成分 ID
  [in] | e | 抽出終了成分 ID

戻り値
  部分ベクトル。引数が条件を満たさなかった場合は、 次元数が 0 のベクトルを返します。