任意次元ベクトルを管理するクラス [詳細]
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_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) |
部分抽出関数 | |
フレンド | |
二項演算子 | |
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_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_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 | 設定値 |
int fk_GenVector::size | ( | void | ) | const |
次元数取得関数
次元数を取得します。
double fk_GenVector::get | ( | int | ID | ) | const |
成分値取得関数
引数に対応する成分を取得します。 最初の成分 ID は 0 です。
[in] | ID | 成分のID |
double fk_GenVector::norm | ( | void | ) | const |
double fk_GenVector::norm2 | ( | void | ) | const |
bool fk_GenVector::normalize | ( | void | ) |
正規化関数
ベクトルの正規化を行います。 正規化とは、ベクトル に対し、 以下の演算で
を求めることです。
void fk_GenVector::init | ( | bool | degFlg = false |
) |
初期化関数
ベクトルの初期化を行います。
[in] | degFlg | true の場合は、次元数を 0 に設定します。 false の場合は、次元数は変化せず、全ての成分を 0 にします。 |
bool fk_GenVector::isZero | ( | void | ) | const |
零ベクトル判定関数
ベクトルが零ベクトルであるかどうかを判定します。
bool fk_GenVector::replace | ( | int | s, | |
fk_GenVector & | Q | |||
) |
部分置換関数1
現在の変数が表す n 次元のベクトル
と、引数として与えられる m 次元ベクトル
について、 の m 個の成分
を の各成分に置き換えます。 条件として、
かつ
を満たしている必要があります。
[in] | s | 置換する最初の成分 ID |
[in] | Q | 置換ベクトル |
bool fk_GenVector::replace | ( | int | s, | |
fk_Vector & | Q | |||
) |
部分置換関数2
現在の変数が表す n 次元のベクトル
と、引数として与えられる 3 次元ベクトル
について、 の 3 個の成分
を の各成分に置き換えます。 条件として、
かつ
を満たしている必要があります。
[in] | s | 置換する最初の成分 ID |
[in] | Q | 置換ベクトル |
bool fk_GenVector::replace | ( | int | s, | |
fk_HVector & | Q | |||
) |
部分置換関数3
現在の変数が表す n 次元のベクトル
と、引数として与えられる 4 次元ベクトル
について、 の 4 個の成分
を の各成分に置き換えます。 条件として、
かつ
を満たしている必要があります。
[in] | s | 置換する最初の成分 ID |
[in] | Q | 置換ベクトル |
bool fk_GenVector::add | ( | int | s, | |
fk_GenVector & | Q | |||
) |
部分加算関数1
現在の変数が表す n 次元のベクトル
と、引数として与えられる m 次元ベクトル
について、 の m 個の成分
に対して の各成分の値を加算します。 条件として、
かつ
を満たしている必要があります。
[in] | s | 加算する最初の成分 ID |
[in] | Q | 加算ベクトル |
bool fk_GenVector::add | ( | int | s, | |
fk_Vector & | Q | |||
) |
部分加算関数2
現在の変数が表す n 次元のベクトル
と、引数として与えられる 3 次元ベクトル
について、 の 3 個の成分
に対して の各成分の値を加算します。 条件として、
かつ
を満たしている必要があります。
[in] | s | 加算する最初の成分 ID |
[in] | Q | 加算ベクトル |
bool fk_GenVector::add | ( | int | s, | |
fk_HVector & | Q | |||
) |
部分加算関数3
現在の変数が表す n 次元のベクトル
と、引数として与えられる 4 次元ベクトル
について、 の 4 個の成分
に対して の各成分の値を加算します。 条件として、
かつ
を満たしている必要があります。
[in] | s | 加算する最初の成分 ID |
[in] | Q | 加算ベクトル |
bool fk_GenVector::sub | ( | int | s, | |
fk_GenVector & | Q | |||
) |
部分減算関数1
現在の変数が表す n 次元のベクトル
と、引数として与えられる m 次元ベクトル
について、 の m 個の成分
に対して の各成分の値を減算します。 条件として、
かつ
を満たしている必要があります。
[in] | s | 減算する最初の成分 ID |
[in] | Q | 減算ベクトル |
bool fk_GenVector::sub | ( | int | s, | |
fk_Vector & | Q | |||
) |
部分減算関数2
現在の変数が表す n 次元のベクトル
と、引数として与えられる 3 次元ベクトル
について、 の 3 個の成分
に対して の各成分の値を加算します。 条件として、
かつ
を満たしている必要があります。
[in] | s | 減算する最初の成分 ID |
[in] | Q | 減算ベクトル |
bool fk_GenVector::sub | ( | int | s, | |
fk_HVector & | Q | |||
) |
部分減算関数3
現在の変数が表す n 次元のベクトル
と、引数として与えられる 4 次元ベクトル
について、 の 4 個の成分
に対して の各成分の値を加算します。 条件として、
かつ
を満たしている必要があります。
[in] | s | 減算する最初の成分 ID |
[in] | Q | 減算ベクトル |
fk_GenVector fk_GenVector::div | ( | int | s, | |
int | e | |||
) |
部分抽出関数
ID が s から e までの成分値を持つ部分ベクトルを抽出します。 条件として、 である必要があります。n は元ベクトルの次元数です。
[in] | s | 抽出開始成分 ID |
[in] | e | 抽出終了成分 ID |
double operator* | ( | const fk_GenVector & | , | |
const fk_GenVector & | ||||
) | [friend] |
内積二項演算子
fk_GenVector 型の n 次元ベクトル と
の内積値(スカラー積)は、以下のように定義されます。
これを得るには、以下のように記述します。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次元ベクトル と
の外積ベクトル(ベクトル積)は、以下のように定義されます。
これを得るには、以下のように記述します。 P,Q,R はいずれも fk_Vector 型の変数です。
R = P ^ Q;
P と Q の次元数が異なる場合は、次元数 0 のベクトルを返します。