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

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

Public メソッド

 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_GenVectoroperator- (void) const
 単項マイナス演算子 [詳細]
 
比較演算子
bool operator== (const fk_GenVector &) const
 同値比較演算子 [詳細]
 
bool operator!= (const fk_GenVector &) const
 異値比較演算子 [詳細]
 
代入演算子
fk_GenVectoroperator= (const fk_GenVector &)
 単純代入演算子 [詳細]
 
fk_GenVectoroperator= (const fk_Vector &)
 fk_Vector 型からの単純代入演算子 [詳細]
 
fk_GenVectoroperator= (const fk_HVector &)
 fk_HVector 型からの単純代入演算子 [詳細]
 
fk_GenVectoroperator*= (double d)
 実数積演算子 [詳細]
 
fk_GenVectoroperator/= (double)
 実数商代入演算子 [詳細]
 
fk_GenVectoroperator+= (const fk_GenVector &)
 単項和代入演算子 [詳細]
 
fk_GenVectoroperator-= (const fk_GenVector &)
 単項差代入演算子 [詳細]
 
fk_GenVectoroperator*= (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)
 部分抽出関数 [詳細]
 

フレンド

二項演算子
double operator* (const fk_GenVector &, const fk_GenVector &)
 内積二項演算子 [詳細]
 
fk_GenVector operator+ (const fk_GenVector &, const fk_GenVector &)
 ベクトル和二項演算子 [詳細]
 
fk_GenVector operator- (const fk_GenVector &, const fk_GenVector &)
 ベクトル差二項演算子 [詳細]
 
fk_GenVector operator* (const fk_GenVector &, double)
 実数倍二項演算子1 [詳細]
 
fk_GenVector operator* (double, const fk_GenVector &)
 実数倍二項演算子2 [詳細]
 
fk_GenVector operator/ (const fk_GenVector &, double)
 実数商二項演算子 [詳細]
 
fk_GenVector operator^ (const fk_GenVector &, const fk_GenVector &)
 外積二項演算子 [詳細]
 

説明

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

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

参照
fk_GenMatrix, fk_Vector, fk_HVector, fk_Matrix

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

fk_GenVector::fk_GenVector ( int  deg = 0)

コンストラクタ1

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

引数
[in]deg次元数
fk_GenVector::fk_GenVector ( std::vector< double > &  array)

コンストラクタ2

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

引数
[in]array成分値配列
fk_GenVector::fk_GenVector ( int  deg,
double *  array 
)

コンストラクタ3

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

引数
[in]deg次元数
[in]array成分値配列
fk_GenVector::fk_GenVector ( const fk_GenVector )

コピーコンストラクタ

fk_GenVector::fk_GenVector ( const fk_Vector )

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

fk_GenVector::fk_GenVector ( const fk_HVector )

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

関数

fk_GenVector& fk_GenVector::operator- ( void  ) const

単項マイナス演算子

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

v2 = -v1;
bool fk_GenVector::operator== ( const fk_GenVector ) const

同値比較演算子

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

if(v1 == v2) {
    :
    :
}

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

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

異値比較演算子

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

if(v1 != v2) {
    :
    :
}

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

fk_GenVector& fk_GenVector::operator= ( const fk_GenVector )

単純代入演算子

fk_GenVector& fk_GenVector::operator= ( const fk_Vector )

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

fk_GenVector& fk_GenVector::operator= ( const fk_HVector )

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

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

実数積演算子

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

V *= d;

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

V *= 2.0;
fk_GenVector& fk_GenVector::operator/= ( double  )

実数商代入演算子

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

V /= d;

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

V /= 2.0;

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

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

単項和代入演算子

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

V1 += V2;

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

V1 = V1 + V2;

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

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

単項差代入演算子

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

V1 -= V2;

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

V1 = V1 - V2;

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

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

行列変換代入演算子

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

V *= M;

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

V = M * V;

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

void fk_GenVector::resize ( int  deg)

次元数設定関数

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

引数
[in]deg次元数
bool fk_GenVector::set ( int  ID,
double  value 
)

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

引数
[in]ID成分のID
[in]value設定値
戻り値
成功すれば true を、失敗すれば false を返します。
int fk_GenVector::size ( void  ) const

次元数取得関数

次元数を取得します。

戻り値
次元数
double fk_GenVector::get ( int  ID) const

成分値取得関数

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

引数
[in]ID成分のID
戻り値
対応する成分値。ID が不正であった場合は無条件に 0.0 を返します。
double 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()
double 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()
bool fk_GenVector::normalize ( void  )

正規化関数

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

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

戻り値
成功した場合 true を、失敗した場合 false を返します。 「失敗」は、元のベクトルが零ベクトルであるか、 次元数が 0 の場合に起こります。
参照
dist()
void fk_GenVector::init ( bool  degFlg = false)

初期化関数

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

引数
[in]degFlgtrue の場合は、次元数を 0 に設定します。 false の場合は、次元数は変化せず、全ての成分を 0 にします。
bool fk_GenVector::isZero ( void  ) const

零ベクトル判定関数

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

戻り値
零ベクトルである場合 true を、そうでない場合 false を返します。 次元数が 0 である場合は true を返します。
bool 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 を返します。
bool 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 を返します。
bool 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 を返します。
bool 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 を返します。
bool 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 を返します。
bool 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 を返します。
bool 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 を返します。
bool 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 を返します。
bool 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 を返します。
fk_GenVector fk_GenVector::div ( int  s,
int  e 
)

部分抽出関数

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

引数
[in]s抽出開始成分 ID
[in]e抽出終了成分 ID
戻り値
部分ベクトル。引数が条件を満たさなかった場合は、 次元数が 0 のベクトルを返します。

フレンドと関連する関数

double operator* ( const fk_GenVector ,
const fk_GenVector  
)
friend

内積二項演算子

fk_GenVector 型の n 次元ベクトル $ \mathbf{P} $$ \mathbf{Q} $ の内積値(スカラー積)は、以下のように定義されます。

\[ \mathbf{P}\cdot\mathbf{Q} = \sum_{i=0}^{n-1} P_iQ_i \]

これを得るには、以下のように記述します。d は double 型の変数です。

d = P * Q;

P と Q の次元数が異なる場合は、無条件に 0.0 を返します。 なお、内積演算は交換法則が成り立ちます。

fk_GenVector operator+ ( const fk_GenVector ,
const fk_GenVector  
)
friend

ベクトル和二項演算子

ベクトル P と Q の和を得るには、以下のように記述します。 P, Q, R はいずれも fk_GenVector 型の変数です。

R = P + Q;

P と Q の次元数が異なる場合は、次元数 0 のベクトルを返します。 なお、和演算は交換法則が成り立ちます。

fk_GenVector operator- ( const fk_GenVector ,
const fk_GenVector  
)
friend

ベクトル差二項演算子

ベクトル P と Q の差を得るには、以下のように記述します。 P, Q, R はいずれも fk_GenVector 型の変数です。

R = P - Q;

P と Q の次元数が異なる場合は、次元数 0 のベクトルを返します。 なお、差演算は交換法則は成り立ちません。

fk_GenVector operator* ( const fk_GenVector ,
double   
)
friend

実数倍二項演算子1

ベクトル V1 のスカラー倍ベクトルを得るには、以下のように記述します。 V1, V2 は共に fk_GenVector 型の変数で、d は double 型の変数です。

V2 = V1 * d;

なお、ベクトルと実数の順番は逆でも構いません。

fk_GenVector operator* ( double  ,
const fk_GenVector  
)
friend

実数倍二項演算子2

ベクトル V1 のスカラー倍ベクトルを得るには、以下のように記述します。 V1, V2 は共に fk_GenVector 型の変数で、d は double 型の変数です。

V2 = d * V1;

なお、ベクトルと実数の順番は逆でも構いません。

fk_GenVector operator/ ( const fk_GenVector ,
double   
)
friend

実数商二項演算子

ベクトル V1 のスカラー商ベクトルを得るには、以下のように記述します。 V1, V2 は共に fk_GenVector 型の変数で、d は double 型の変数です。

V2 = V1/d;
fk_GenVector operator^ ( const fk_GenVector ,
const fk_GenVector  
)
friend

外積二項演算子

n次元ベクトル $ \mathbf{P} $$ \mathbf{Q} $ の外積ベクトル(ベクトル積)は、以下のように定義されます。

\[ \mathbf{P} \times \mathbf{Q} = \left(P_1Q_2 - P_2Q_1, \; P_2Q_3 - P_3Q_2, \ldots, \; P_{n-2}Q_{n-1} - P_{n-1}Q_{n-2}, \; P_{n-1}Q_0 - P_0Q_{n-1}, \; P_0Q_1 - P_1Q_0\right) \]

これを得るには、以下のように記述します。 P,Q,R はいずれも fk_Vector 型の変数です。

R = P ^ Q;

P と Q の次元数が異なる場合は、次元数 0 のベクトルを返します。