FineKernelToolKit 4.2.13
|
任意次元ベクトルを管理するクラス [詳解]
#include <CLI/FK_CLI/include/GenVector_CLI.h>
公開メンバ関数 | |
fk_GenVector () | |
コンストラクタ1 | |
fk_GenVector (int deg) | |
コンストラクタ2 | |
fk_GenVector (IEnumerable< double >^ array) | |
コンストラクタ3 | |
fk_GenVector (fk_Vector^ V) | |
fk_Vector からのコピーコンストラクタ | |
fk_GenVector (fk_HVector^ H) | |
fk_HVector からのコピーコンストラクタ | |
fk_GenVector (fk_GenVector^ GV) | |
コピーコンストラクタ | |
~fk_GenVector () | |
デストラクタ | |
!fk_GenVector () | |
ファイナライザ | |
bool | Equals (fk_GenVector^ V) |
同値比較メソッド1 | |
virtual bool | Equals (Object^ O) override |
同値比較メソッド2 | |
String ^ | ToString () override |
文字列出力メソッド | |
bool | Normalize (void) |
正規化メソッド | |
void | Init (bool degFlg) |
初期化メソッド1 | |
void | Init (void) |
初期化メソッド2 | |
bool | IsZero (void) |
零ベクトル判定メソッド | |
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) |
部分抽出メソッド | |
静的公開メンバ関数 | |
static fk_GenVector ^ | operator- (fk_GenVector^ argV) |
単項マイナス演算子 | |
static double | operator* (fk_GenVector^ P, fk_GenVector^ Q) |
内積二項演算子 | |
static fk_GenVector ^ | operator+ (fk_GenVector^ P, fk_GenVector^ Q) |
ベクトル和二項演算子 | |
static fk_GenVector ^ | operator- (fk_GenVector^ P, fk_GenVector^ Q) |
ベクトル差二項演算子 | |
static fk_GenVector ^ | operator* (fk_GenVector^ V1, double d) |
実数倍二項演算子1 | |
static fk_GenVector ^ | operator* (double d, fk_GenVector^ V1) |
実数倍二項演算子2 | |
static fk_GenVector ^ | operator/ (fk_GenVector^ V1, double d) |
実数商二項演算子 | |
static fk_GenVector ^ | operator^ (fk_GenVector^ P, fk_GenVector^ Q) |
外積二項演算子 | |
static void | operator*= (fk_GenVector^ V, double d) |
実数積演算子 | |
static void | operator/= (fk_GenVector^ V, double d) |
実数商代入演算子 | |
static void | operator+= (fk_GenVector^ V1, fk_GenVector^ V2) |
単項和代入演算子 | |
static void | operator-= (fk_GenVector^ V1, fk_GenVector^ V2) |
単項差代入演算子 | |
プロパティ | |
double | default [int] [get, set] |
成分プロパティ | |
int | Size [get, set] |
次元数プロパティ | |
double | Norm [get] |
ノルムプロパティ | |
double | Norm2 [get] |
ノルム2乗プロパティ | |
任意次元ベクトルを管理するクラス
このクラスは、任意次元ベクトルの様々な機能を提供します。 このクラス単体でも、線形空間におけるベクトルの様々な演算を利用することができます。 最も重要な機能は、 fk_GenMatrix クラスと合わせた行列演算による連立方程式の計算です。 4元以下の行列演算については、 fk_Matrix を利用した方が高速です。
FK_CLI::fk_GenVector::fk_GenVector | ( | ) |
コンストラクタ1
次元数が 0 である (つまり成分のない)ベクトルを生成します。
FK_CLI::fk_GenVector::fk_GenVector | ( | int | deg | ) |
コンストラクタ2
次元数のみを指定するコンストラクタです。 全ての成分に 0 が設定されます。
[in] | deg | 次元数 |
FK_CLI::fk_GenVector::fk_GenVector | ( | IEnumerable< double >^ | array | ) |
コンストラクタ3
このコンストラクタでは、 引数として double 型配列 (array) を入力とします。
[in] | array | 成分値配列 |
FK_CLI::fk_GenVector::fk_GenVector | ( | fk_HVector^ | H | ) |
fk_HVector からのコピーコンストラクタ
FK_CLI::fk_GenVector::fk_GenVector | ( | fk_GenVector^ | GV | ) |
コピーコンストラクタ
FK_CLI::fk_GenVector::~fk_GenVector | ( | ) |
デストラクタ
FK_CLI::fk_GenVector::!fk_GenVector | ( | ) |
ファイナライザ
bool FK_CLI::fk_GenVector::Equals | ( | fk_GenVector^ | V | ) |
同値比較メソッド1
2つのベクトルの値が同値かどうかを判定します。 単純に == 演算子を用いた場合はインスタンスが同一であるかどうかの判定となるため、 異なるインスタンスで同値かどうかを判定する場合はこのメソッドを利用して下さい。
[in] | V | 同値かどうかを判定するベクトル |
|
overridevirtual |
同値比較メソッド2
2つのベクトルの値が同値かどうかを判定します。 単純に == 演算子を用いた場合はインスタンスが同一であるかどうかの判定となるため、 異なるインスタンスで同値かどうかを判定する場合はこのメソッドを利用して下さい。
[in] | O | 同値かどうかを判定するベクトル |
|
static |
単項マイナス演算子
fk_GenVector では、以下のように記述することで、v2 に -v1 を代入できます。 全ての成分の符号が反転します。 v2 の次元数は v1 と同じに設定されます。
v2 = -v1;
|
static |
内積二項演算子
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 を返します。 なお、内積演算は交換法則が成り立ちます。
|
static |
ベクトル和二項演算子
ベクトル P と Q の和を得るには、以下のように記述します。 P, Q, R はいずれも fk_GenVector 型の変数です。
R = P + Q;
P と Q の次元数が異なる場合は、次元数 0 のベクトルを返します。 なお、和演算は交換法則が成り立ちます。
|
static |
ベクトル差二項演算子
ベクトル P と Q の差を得るには、以下のように記述します。 P, Q, R はいずれも fk_GenVector 型の変数です。
R = P - Q;
P と Q の次元数が異なる場合は、次元数 0 のベクトルを返します。 なお、差演算は交換法則は成り立ちません。
|
static |
実数倍二項演算子1
ベクトル V1 のスカラー倍ベクトルを得るには、以下のように記述します。 V1, V2 は共に fk_GenVector 型の変数で、d は double 型の変数です。
V2 = V1 * d;
なお、ベクトルと実数の順番は逆でも構いません。
|
static |
実数倍二項演算子2
ベクトル V1 のスカラー倍ベクトルを得るには、以下のように記述します。 V1, V2 は共に fk_GenVector 型の変数で、d は double 型の変数です。
V2 = d * V1;
なお、ベクトルと実数の順番は逆でも構いません。
|
static |
実数商二項演算子
ベクトル V1 のスカラー商ベクトルを得るには、以下のように記述します。 V1, V2 は共に fk_GenVector 型の変数で、d は double 型の変数です。
V2 = V1/d;
|
static |
外積二項演算子
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 のベクトルを返します。
|
static |
実数積演算子
以下のコードは、ベクトル V の成分全てを d 倍します。 V は fk_GenVector 型の変数、d は double 型の変数です。
V *= d;
d は変数でなく数値でも構いません。
V *= 2.0;
|
static |
実数商代入演算子
以下のコードは、ベクトル V の成分全てを 1/d 倍します。 V は fk_GenVector 型の変数、d は double 型の変数です。
V /= d;
d は変数でなく数値でも構いません。
V /= 2.0;
なお、d が 0 であった場合は V の値を変更しません。
|
static |
単項和代入演算子
以下のコードは、V1 に V2 を追加します。 V1、V2 はいずれも fk_GenVector 型の変数です。
V1 += V2;
上記コードは、以下のコードと同義です。
V1 = V1 + V2;
V1 と V2 の次元数が異なる場合は、V1 の値は変化しません。
|
static |
単項差代入演算子
以下のコードは、V1 から V2 を引きます。 V1、V2 はいずれも fk_Vector 型の変数です。
V1 -= V2;
上記コードは、以下のコードと同義です。
V1 = V1 - V2;
V1 と V2 の次元数が異なる場合は、V1 の値は変化しません。
|
override |
文字列出力メソッド
現在のベクトル成分値を文字列として出力します。
bool FK_CLI::fk_GenVector::Normalize | ( | void | ) |
void FK_CLI::fk_GenVector::Init | ( | bool | degFlg | ) |
初期化メソッド1
ベクトルの成分を全て 0 にします。
[in] | degFlg | true の場合は、次元数を 0 に設定します。 false の場合は、次元数は変化せず、全ての成分を 0 にします。 |
void FK_CLI::fk_GenVector::Init | ( | void | ) |
初期化メソッド2
ベクトルの成分を全て 0 にします。 次元数は変化しません。
bool FK_CLI::fk_GenVector::IsZero | ( | void | ) |
零ベクトル判定メソッド
ベクトルが零ベクトルであるかどうかを判定します。
bool FK_CLI::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 | 置換ベクトル |
bool FK_CLI::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 | 置換ベクトル |
bool FK_CLI::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 | 置換ベクトル |
bool FK_CLI::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 | 加算ベクトル |
bool FK_CLI::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 | 加算ベクトル |
bool FK_CLI::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 | 加算ベクトル |
bool FK_CLI::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 | 減算ベクトル |
bool FK_CLI::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 | 減算ベクトル |
bool FK_CLI::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 | 減算ベクトル |
fk_GenVector ^ FK_CLI::fk_GenVector::Div | ( | int | s, |
int | e | ||
) |
部分抽出メソッド
ID が s から e までの成分値を持つ部分ベクトルを抽出します。 条件として、 \( 0 \leq s < e < n \) である必要があります。n は元ベクトルの次元数です。
[in] | s | 抽出開始成分 ID |
[in] | e | 抽出終了成分 ID |
|
getset |
成分プロパティ
各成分の設定や参照を行います。
V[0] = 5.0;
|
getset |
次元数プロパティ
次元数 (成分の個数) の設定や参照を行います。
int deg = V.size; V.size = 10;
|
get |
ノルムプロパティ
現在のベクトルのノルム(長さ)を取得します。 これは、ベクトル \( \mathbf{V} = \{V_0, V_1, \ldots, V_{n-1}\} \) に対し、
\[ \sqrt{\sum_{i = 0}^{n-1} {V_i}^2} \]
の値となります。
|
get |
ノルム2乗プロパティ
現在のベクトルのノルム(長さ)の2乗を取得します。 これは、ベクトル \( \mathbf{V} = \{V_0, V_1, \ldots, V_{n-1}\} \) に対し、
\[ \sum_{i = 0}^{n-1} {V_i}^2 \]
の値となります。