WIL説明書(C++)  3.0.0
全メンバ一覧 | 公開型 | 公開メンバ関数 | 静的公開メンバ関数 | フレンド
FVCL::Data::CFvMatrix クラス

行列クラス [詳解]

詳解

行列クラス

namespace FVCL::Data

行列情報を保有するクラスです。
本クラスでサポートする行列は、2次元の行列のみで、横方向(列)と縦方向(行)から成り立ちます。

必要条件:
ヘッダー: FVCLbasic.h
参照
FVCL::Data::CFvVector
FIE:
FMATRIX
+ FVCL::Data::CFvMatrix の継承関係図

公開型

enum  { DataID = 200 }
 

公開メンバ関数

 CFvMatrix ()
 コンストラクタ [詳解]
 
 CFvMatrix (INT width, INT height)
 (非推奨) コンストラクタ [詳解]
 
 CFvMatrix (INT rows, INT cols, DOUBLE **matrix)
 コンストラクタ [詳解]
 
 CFvMatrix (FMATRIX *matrix, bool attach)
 コンストラクタ [詳解]
 
 CFvMatrix (const CFvMatrix &src)
 コピーコンストラクタ [詳解]
 
virtual ~CFvMatrix ()
 デストラクタ [詳解]
 
virtual INT GetDataID () const
 データIDの取得 [詳解]
 
virtual bool GetPointer (INT id, void **val) const
 インスタンスのthisポインタの取得 [詳解]
 
virtual bool Load (LPCTSTR szFileName)
 ファイル読み込み [詳解]
 
virtual bool Save (LPCTSTR szFileName)
 ファイル保存 [詳解]
 
virtual bool Resize (INT rows, INT cols)
 領域の確保 [詳解]
 
virtual void Free ()
 行列の解放 [詳解]
 
virtual bool Attach (INT rows, INT cols, DOUBLE **matrix)
 アタッチ [詳解]
 
virtual bool Attach (FMATRIX *matrix)
 アタッチ [詳解]
 
virtual void IsAttach (bool value)
 アタッチ属性の設定 [詳解]
 
virtual bool IsAttach () const
 アタッチ属性の取得 [詳解]
 
virtual bool SetHandle (FMATRIX *handle)
 ハンドルの設定 [詳解]
 
virtual FMATRIX * GetHandle () const
 行列構造体のアドレスの取得 [詳解]
 
virtual FMATRIX * GetFMATRIX () const
 行列構造体のアドレスの取得 [詳解]
 
virtual INT GetRows () const
 行サイズの取得 [詳解]
 
virtual INT GetColumns () const
 列サイズの取得 [詳解]
 
virtual DOUBLE ** GetAddress () const
 行列データの先頭アドレス取得 [詳解]
 
virtual bool SetRowVector (INT row, const CFvVector &vector)
 ベクトルの設定 (行指定) [詳解]
 
virtual CFvVector GetRowVector (INT row) const
 ベクトルの取得 (行指定) [詳解]
 
virtual bool SetColVector (INT col, const CFvVector &vector)
 ベクトルの設定 (列指定) [詳解]
 
virtual CFvVector GetColVector (INT col) const
 ベクトルの取得 (行指定) [詳解]
 
bool SetSize (INT width, INT height)
 サイズの設定 [詳解]
 
bool GetSize (INT *width, INT *height) const
 サイズの取得 [詳解]
 
INT GetWidth () const
 列数の取得 [詳解]
 
INT GetHeight () const
 行数の取得 [詳解]
 
bool SetValue (INT x, INT y, DOUBLE value)
 行列データの設定 [詳解]
 
DOUBLE GetValue (INT x, INT y) const
 行列データの取得 [詳解]
 
virtual DOUBLEoperator[] (INT row)
 行列データの先頭アドレス取得 (行指定) [詳解]
 
virtual const DOUBLEoperator[] (INT row) const
 行列データの先頭アドレス取得 (行指定) [詳解]
 
virtual DOUBLEoperator() (INT row, INT col)
 行列要素への参照 (行、列指定) [詳解]
 
virtual const DOUBLEoperator() (INT row, INT col) const
 行列要素への参照 (行、列指定) [詳解]
 
virtual CFvMatrixoperator= (const CFvMatrix &src)
 代入オペレータ [詳解]
 
virtual bool operator== (const CFvMatrix &src) const
 比較オペレータ(等価演算子) [詳解]
 
virtual bool operator!= (const CFvMatrix &src) const
 比較オペレータ(非等価演算子) [詳解]
 
virtual CFvMatrix operator+ (const CFvMatrix &src) const
 加算オペレータ(行列) [詳解]
 
virtual CFvMatrix operator+ (DOUBLE scalar) const
 加算オペレータ(スカラー) [詳解]
 
virtual CFvMatrixoperator+= (const CFvMatrix &src)
 加算代入オペレータ(行列) [詳解]
 
virtual CFvMatrixoperator+= (DOUBLE scalar)
 加算代入オペレータ(スカラー) [詳解]
 
virtual CFvMatrix operator- (const CFvMatrix &src) const
 減算オペレータ(行列) [詳解]
 
virtual CFvMatrix operator- (DOUBLE scalar) const
 減算オペレータ(スカラー) [詳解]
 
virtual CFvMatrixoperator-= (const CFvMatrix &src)
 減算代入オペレータ(行列) [詳解]
 
virtual CFvMatrixoperator-= (DOUBLE scalar)
 減算代入オペレータ(スカラー) [詳解]
 
virtual CFvMatrix operator* (const CFvMatrix &src) const
 乗算オペレータ(行列) [詳解]
 
virtual CFvMatrix operator* (DOUBLE scalar) const
 乗算オペレータ(スカラー) [詳解]
 
virtual CFvMatrixoperator*= (const CFvMatrix &src)
 乗算代入オペレータ(行列) [詳解]
 
virtual CFvMatrixoperator*= (DOUBLE scalar)
 乗算代入オペレータ(スカラー) [詳解]
 
CFvMatrixAdd (const CFvMatrix &src)
 加算 (行列+行列) [詳解]
 
CFvMatrixAddScalar (DOUBLE scalar)
 加算 (行列+スカラー) [詳解]
 
CFvMatrixSub (const CFvMatrix &src)
 減算 (行列-行列) [詳解]
 
CFvMatrixSubScalar (DOUBLE scalar)
 減算 (行列-スカラー) [詳解]
 
CFvMatrixMul (const CFvMatrix &src)
 乗算 (行列*行列) [詳解]
 
CFvMatrixMulScalar (DOUBLE scalar)
 乗算 (行列*スカラー) [詳解]
 
void eye ()
 単位行列の作成 [詳解]
 
void ones ()
 要素が全て1の行列の作成 [詳解]
 
void zeros ()
 要素が全て0の行列の作成 [詳解]
 
void rand ()
  [[OSS]] ランダム行列の作成 [詳解]
 
CFvMatrix triu (INT k) const
 上三角成分の抽出 [詳解]
 
CFvMatrix tril (INT k) const
 下三角成分の抽出 [詳解]
 
CFvMatrix circshift (INT sx, INT sy) const
 行列要素の循環シフト [詳解]
 
CFvMatrix cat_horz (const CFvMatrix &right) const
 行列要素の水平方向結合 [詳解]
 
CFvMatrix cat_vert (const CFvMatrix &bottom) const
 行列要素の垂直方向結合 [詳解]
 
CFvMatrix flipdim_horz () const
 行列要素の反転 (左右反転) [詳解]
 
CFvMatrix flipdim_vert () const
 行列要素の反転 (上下反転) [詳解]
 
CFvMatrix Inverse (UINT option=1) const
 逆行列の生成 [詳解]
 
CFvVector solve (const CFvVector &vector) const
 連立一次方程式の計算 [詳解]
 
CFvMatrix transpose () const
 行列の転置 [詳解]
 
DOUBLE trace () const
 行列のトレースの計算 [詳解]
 
DOUBLE max_elem () const
 成分の最大値抽出 [詳解]
 
DOUBLE min_elem () const
 成分の最小値抽出 [詳解]
 
CFvMatrix asin () const
 各成分の asin の計算 [詳解]
 
CFvMatrix acos () const
 各成分の acos の計算 [詳解]
 
CFvMatrix atan () const
 各成分の atan の計算 [詳解]
 
CFvMatrix atan2 (const CFvMatrix &ax) const
 各成分の atan2 の計算 [詳解]
 
CFvMatrix cos () const
 各成分の cos の計算 [詳解]
 
CFvMatrix sin () const
 各成分の sin の計算 [詳解]
 
CFvMatrix tan () const
 各成分の tan の計算 [詳解]
 
CFvMatrix exp () const
 各成分の exp の計算 [詳解]
 
CFvMatrix log () const
 各成分の log の計算 [詳解]
 
CFvMatrix sqrt () const
 各成分の sqrt の計算 [詳解]
 
CFvMatrix abs () const
 各成分の abs の計算 [詳解]
 
CFvMatrix ceil () const
 各成分の ceil の計算 [詳解]
 
CFvMatrix floor () const
 各成分の floor の計算 [詳解]
 
CFvMatrix mul_elem (const CFvMatrix &src) const
 成分ごとの乗算 (行列*行列) [詳解]
 
CFvMatrix div_elem (const CFvMatrix &src) const
 成分ごとの除算 (行列/行列) [詳解]
 
void modf (CFvMatrix *dsti, CFvMatrix *dstf) const
 各成分の modf の計算 [詳解]
 
bool has_nan () const
 NaN 値を含んでいるか否かの判定 [詳解]
 
bool is_nan () const
 全ての要素が NaN 値か否かの判定 [詳解]
 
bool is_normal () const
 非数値判定 [詳解]
 
DOUBLE det () const
  [[OSS]] 行列式の計算 [詳解]
 
DOUBLE norm (INT type) const
  [[OSS]] 行列のノルムの計算 [詳解]
 
INT rank (DOUBLE tol) const
  [[OSS]] 行列のランクの計算 [詳解]
 
DOUBLE cond (INT type) const
  [[OSS]] 行列の条件数計算 [詳解]
 
DOUBLE rcond () const
  [[OSS]] 行列の条件数の逆数計算 [詳解]
 
void chol (CFvMatrix *a, INT mode) const
  [[OSS]] 行列のコレスキー分解 [詳解]
 
void lu (CFvMatrix *a, CFvBuffer< INT > *pivot) const
  [[OSS]] 行列の LU 分解 [詳解]
 
void qr (CFvMatrix *q, CFvMatrix *r) const
  [[OSS]] 行列の QR 分解 [詳解]
 
void svd (CFvMatrix *u, CFvMatrix *vt, CFvBuffer< DOUBLE > *sigma) const
  [[OSS]] 行列の特異値分解 [詳解]
 
void svd2 (CFvMatrix *u, CFvMatrix *vt, CFvBuffer< DOUBLE > *sigma, INT mode, DOUBLE rcond, INT *rank) const
  [[OSS]] 行列の特異値分解 (convenience function) [詳解]
 
void eig (CFvBuffer< FCOMPLEX > *lambda, CFvBuffer< FCOMPLEX > *vr, CFvBuffer< FCOMPLEX > *vl) const
  [[OSS]] 行列の固有値・固有ベクトル計算 [詳解]
 
void inverse3 (CFvMatrix *ai, DOUBLE *det) const
  [[OSS]] 行列の逆行列計算(LAPACK使用) [詳解]
 
void pseudo_inverse (CFvMatrix *ai, DOUBLE threshold, INT *rank) const
  [[OSS]] 行列の擬似逆行列計算(LAPACK使用) [詳解]
 
void linsolve (INT method, DOUBLE rcond, const CFvVector &b, CFvVector *x, DOUBLE *residual, INT *rank) const
  [[OSS]] 連立一次方程式の計算 [詳解]
 
void linsolve2 (INT method, DOUBLE rcond, const CFvMatrix &b, CFvMatrix *x, CFvBuffer< DOUBLE > *residuals, INT *rank) const
  [[OSS]] 連立一次方程式の計算 [詳解]
 
- 基底クラス FVCL::CFvDataObject に属する継承公開メンバ関数
 CFvDataObject ()
 標準のコンストラクタ [詳解]
 
virtual ~CFvDataObject ()
 デストラクタ [詳解]
 
- 基底クラス FVCL::CFvObject に属する継承公開メンバ関数
 CFvObject ()
 標準のコンストラクタ [詳解]
 
virtual ~CFvObject ()
 デストラクタ [詳解]
 
INT SetErrorCode (INT err)
 エラーコードの設定 [詳解]
 
INT SetErrorCode (INT err) const
 エラーコードの設定 [詳解]
 
INT GetErrorCode () const
 エラーコードの取得 [詳解]
 
bool SetAllocateOption (INT value)
 画像領域確保時のオプションの設定 [詳解]
 
INT GetAllocateOption () const
 画像領域確保時のオプションの取得 [詳解]
 
void * operator new (size_t uiSize)
 new オペレータ [詳解]
 
void * operator new[] (size_t uiSize)
 new[] オペレータ [詳解]
 
void operator delete (void *pvObject)
 delete オペレータ [詳解]
 
void operator delete[] (void *pvObject)
 delete[] オペレータ [詳解]
 
void * operator new (size_t uiSize, LPCSTR szFileName, INT iLine)
 new オペレータ [詳解]
 
void * operator new[] (size_t uiSize, LPCSTR szFileName, INT iLine)
 new[] オペレータ [詳解]
 
void operator delete (void *pvObject, LPCSTR szFileName, INT iLine)
 delete オペレータ [詳解]
 
void operator delete[] (void *pvObject, LPCSTR szFileName, INT iLine)
 delete[] オペレータ [詳解]
 
virtual CFvObjectoperator= (const CFvObject &src)
 代入オペレータ [詳解]
 
virtual bool operator== (const CFvObject &src) const
 比較オペレータ (==) [詳解]
 
virtual bool operator!= (const CFvObject &src) const
 比較オペレータ (!=) [詳解]
 

静的公開メンバ関数

static CFvMatrix alloc (INT rows, INT cols)
 行列の生成 (0 初期化) [詳解]
 
static CFvMatrix alloc_eye (INT rows, INT cols)
 単位行列の作成 [詳解]
 
static CFvMatrix alloc_ones (INT rows, INT cols)
 行列の生成 (すべて 1 で初期化) [詳解]
 
- 基底クラス FVCL::CFvObject に属する継承静的公開メンバ関数
static bool SetDefaultAllocateOption (INT value)
 既定の画像領域確保時のオプションの設定 [詳解]
 
static INT GetDefaultAllocateOption ()
 既定の画像領域確保時のオプションの取得 [詳解]
 

フレンド

FVCL_API friend CFvVector operator* (const CFvMatrix &matrix, const CFvVector &vector)
 乗算オペレータ(行列*ベクトル) [詳解]
 
FVCL_API friend CFvVector operator* (const CFvVector &vector, const CFvMatrix &matrix)
 乗算オペレータ(ベクトル*行列) [詳解]
 
FVCL_API friend CFvMatrix operator/ (const CFvMatrix &matrix, DOUBLE scalar)
 除算オペレータ(行列/スカラー) [詳解]
 
FVCL_API friend CFvMatrix operator/ (DOUBLE scalar, const CFvMatrix &matrix)
 除算オペレータ(スカラー/行列) [詳解]
 

その他の継承メンバ

- 基底クラス FVCL::CFvObject に属する継承限定公開メンバ関数
INT fnCPUCheck ()
 CPU情報の取得 [詳解]
 
- 基底クラス FVCL::CFvObject に属する継承限定公開変数類
INT m_ErrorCode
 エラーコード [詳解]
 
INT m_AllocateOption
 画像領域確保時のオプション [詳解]
 

列挙型メンバ詳解

anonymous enum
列挙値
DataID 

行列クラスのデータID

このクラスのデータIDです。

構築子と解体子

FVCL::Data::CFvMatrix::CFvMatrix ( )

コンストラクタ

標準のコンストラクタです。

3x3 の行列を確保します。各成分は 0 初期化されています。

FVCL::Data::CFvMatrix::CFvMatrix ( INT  width,
INT  height 
)

(非推奨) コンストラクタ

引数に指定されたサイズで行列を生成してオブジェクトを構築します。
確保する行列のサイズは width*height < 2^28 を満たすように指定してください。

確保された行列の内容は、0 で初期化されます。
確保されたメモリはデストラクタで自動的に解放されます。

引数
[in]width列サイズ(1以上)
[in]height行サイズ(1以上)
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
参照
~CFvMatrix
解説:
このコンストラクタは、行数と列数の順序が反転している為、推奨されません。
新しい開発では alloc か、 Resize を使用してください。
(1) 従来(WIL 1.x 系)のコード
const INT ROWS = 3;
const INT COLS = 3;
CFvMatrix matrix(COLS,ROWS);
DOUBLE** adrs = matrix.GetAddress();
for( INT y=0; y<matrix.GetHeight(); y++ )
{
for( INT x=0; x<matrix.GetWidth(); x++ )
{
if(y==x) adrs[y][x] = 1;
else adrs[y][x] = 0;
}
}

(2-1) 推奨するコード例
const INT ROWS = 3;
const INT COLS = 3;
CFvMatrix matrix = CFvMatrix::alloc(ROWS,COLS);
for( INT row=0; row<matrix.GetRows(); row++ )
{
for( INT col=0; col<matrix.GetColumns(); col++ )
{
if(row==col) matrix(row,col) = 1;
else matrix(row,col) = 0;
}
}

(2-2) 推奨するコード例
const INT ROWS = 3;
const INT COLS = 3;
CFvMatrix matrix;
matrix.Resize(ROWS,COLS);
for( INT row=0; row<matrix.GetRows(); row++ )
{
for( INT col=0; col<matrix.GetColumns(); col++ )
{
if(row==col) matrix(row,col) = 1;
else matrix(row,col) = 0;
}
}

バージョン
FVCLbasic v1.1.0.0: 幅と高さの上限を設けました。
幅または高さの何れかが 16,384 以上の時に FVCL::CFveBadAllocException を返します。
FVCLbasic v1.3.0.0: 幅と高さの上限を変更しました。
width*height が 2^28 以上の時に FVCL::CFveBadAllocException を返します。
FVCL::Data::CFvMatrix::CFvMatrix ( INT  rows,
INT  cols,
DOUBLE **  matrix 
)

コンストラクタ

引数に指定されたサイズで行列を生成するか、 引数に指定されたアドレスにアタッチしてオブジェクトを構築します。
行列のサイズは rows*cols < 2^28 を満たすように指定してください。
指定されたメモリアドレスは解放されません。

※注)
引数 matrix に NULL を指定した時は、指定されたサイズで Resize を実行します。
NULL 以外の時は Attach を実行します。

引数
[in]rows行サイズ(1以上)
[in]cols列サイズ(1以上)
[in]matrix2次元配列のアドレス
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
参照
Resize
Attach
FVCL::Data::CFvMatrix::CFvMatrix ( FMATRIX *  matrix,
bool  attach 
)

コンストラクタ

初期値を指定してオブジェクトを構築します。

引数
[in]matrix行列構造体
[in]attachアタッチ指定
  • true : アタッチします。引数に指定した matrix は、ユーザー側で管理してください。
  • false : アタッチしません。引数に指定した matrix は、このクラスが破棄される際に解放されます。

例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
FVCL::Data::CFvMatrix::CFvMatrix ( const CFvMatrix src)

コピーコンストラクタ

引数の行列と同じサイズの行列を生成し、データをコピーします。 確保されたメモリはデストラクタで自動的に解放されます。

引数
[in]src複製元
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
参照
~CFvMatrix
FVCL::Data::CFvMatrix::~CFvMatrix ( )
virtual

デストラクタ

メモリの解放を行います。

関数詳解

FVCL::Data::CFvMatrix::GetDataID ( ) const
virtual

データIDの取得

データIDを取得します。

戻り値
データIDを返します。
サンプルコード:
void GetDataID()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
// 1) インスタンスの準備.
// 2) 実行.
int result = mat.GetDataID();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.GetDataID -> %d\n"), result);
}
【関数の出力】
User::SampleCode::Data::Matrix::GetDataID
CFvMatrix.GetDataID -> 200

参照
CFvMatrix::DataID

FVCL::CFvDataObjectを実装しています。

FVCL::Data::CFvMatrix::GetPointer ( INT  id,
void **  val 
) const
virtual

インスタンスのthisポインタの取得

指定されたデータIDと自身のIDが一致する場合に thisポインタを返します。

引数
[in]idデータID
[out]valthisポインタを格納する変数へのポインタ
戻り値
true正常
false異常
参照
CFvMatrix::DataID

FVCL::CFvDataObjectを実装しています。

FVCL::Data::CFvMatrix::Load ( LPCTSTR  szFileName)
virtual

ファイル読み込み

指定されたファイルからデータを復元します。
通常は Save メソッドで保存したファイルを指定してください。 それ以外で、何らかの画像ファイルが存在するとき、できる限り復元しようとしますが内容が正常とは限りません。

引数
[in]szFileNameファイル名称
戻り値
true正常
false異常
GetErrorCodeメソッドによりエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。メモリが不足しています。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが無効です。ファイル名に null や空白は指定できません。
21 FVCL_ErrorCode::NOT_SUPPORTED 指定されたファイル形式はサポートされていません。
23 FVCL_ErrorCode::NOT_ALLOCATED メモリが確保されていません。
サンプルコード:
void Save(LPCTSTR savefile)
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
// 3) 実行.
mat.Save(savefile);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Save -> Success.\n"));
}
void Load(LPCTSTR loadfile)
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
// 3) 実行.
mat.Load(loadfile);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Load\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
void FileIO()
{
Save(_T(".\\matrix.raw")); _tprintf(_T("\n"));
Load(_T(".\\matrix.raw")); _tprintf(_T("\n"));
}
【関数の出力】
User::SampleCode::Data::Matrix::Save
CFvMatrix.Save -> Success.

User::SampleCode::Data::Matrix::Load
CFvMatrix.Load
[0][0]=1.000000 [0][1]=3.000000 [0][2]=3.000000
[1][0]=4.000000 [1][1]=-2.000000 [1][2]=1.000000
[2][0]=2.000000 [2][1]=5.000000 [2][2]=-1.000000

FVCL::CFvDataObjectを再実装しています。

FVCL::Data::CFvMatrix::Save ( LPCTSTR  szFileName)
virtual

ファイル保存

指定されたファイルにデータを保存します。
行列を画像ファイルに保存します。
サポートしている画像ファイルの形式は以下の通りです。

  • .raw
    FVCL::File::CFvImageFileRaw を使用して保存します。
  • .tif / .tiff
    FVCL::File::CFvImageFileTiff を使用して保存します。
    fvalg_oss_mt がアプリケーションの実行ディレクトリまたは パス環境変数に指定されたディレクトリに存在している必要があります。


引数
[in]szFileNameファイル名称
※注) カレントであってもパスを付加してください。
戻り値
true正常
false異常
GetErrorCodeメソッドによりエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。メモリが不足しています。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが無効です。ファイル名に null や空白は指定できません。
21 FVCL_ErrorCode::NOT_SUPPORTED 指定されたファイル形式はサポートされていません。
23 FVCL_ErrorCode::NOT_ALLOCATED メモリが確保されていません。
サンプルコード:
void Save(LPCTSTR savefile)
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
// 3) 実行.
mat.Save(savefile);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Save -> Success.\n"));
}
void Load(LPCTSTR loadfile)
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
// 3) 実行.
mat.Load(loadfile);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Load\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
void FileIO()
{
Save(_T(".\\matrix.raw")); _tprintf(_T("\n"));
Load(_T(".\\matrix.raw")); _tprintf(_T("\n"));
}
【関数の出力】
User::SampleCode::Data::Matrix::Save
CFvMatrix.Save -> Success.

User::SampleCode::Data::Matrix::Load
CFvMatrix.Load
[0][0]=1.000000 [0][1]=3.000000 [0][2]=3.000000
[1][0]=4.000000 [1][1]=-2.000000 [1][2]=1.000000
[2][0]=2.000000 [2][1]=5.000000 [2][2]=-1.000000

FVCL::CFvDataObjectを再実装しています。

FVCL::Data::CFvMatrix::alloc ( INT  rows,
INT  cols 
)
static

行列の生成 (0 初期化)

行列を確保して返します。
確保する行列のサイズは rows*cols < 2^28 を満たすように指定してください。
確保された行列の各要素は 0 初期化されています。

引数
[in]rows行数 (1~)
[in]cols列数 (1~)
例外
FVCL::CFveException確保に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
サンプルコード:
const INT ROWS = 3;
const INT COLS = 3;
CFvMatrix matrix = CFvMatrix::alloc(ROWS,COLS);

バージョン
FVCLbasic v2.0.0.0: 新規追加
参照
Resize
FVCL::Data::CFvMatrix::alloc_eye ( INT  rows,
INT  cols 
)
static

単位行列の作成

正方行列を確保して、単位行列に設定して返します。 対角成分が 1.0 になり、他の成分は 0.0 になります。 確保する行列のサイズは rows*cols < 2^28 を満たすように指定してください。

引数
[in]rows行数 (1~)
[in]cols列数 (1~)
例外
FVCL::CFveException確保に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
サンプルコード:
const INT ROWS = 3;
const INT COLS = 3;
CFvMatrix matrix = CFvMatrix::alloc_eye(ROWS,COLS);

バージョン
FVCLbasic v2.0.0.0: 新規追加
参照
Resize
FVCL::Data::CFvMatrix::alloc_ones ( INT  rows,
INT  cols 
)
static

行列の生成 (すべて 1 で初期化)

行列を確保して返します。
確保する行列のサイズは rows*cols < 2^28 を満たすように指定してください。
確保された行列の各要素は 1 で初期化されています。

引数
[in]rows行数 (1~)
[in]cols列数 (1~)
例外
FVCL::CFveException確保に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
サンプルコード:
const INT ROWS = 3;
const INT COLS = 3;
CFvMatrix matrix = CFvMatrix::alloc_ones(ROWS,COLS);

バージョン
FVCLbasic v2.0.0.0: 新規追加
参照
Resize
FVCL::Data::CFvMatrix::Resize ( INT  rows,
INT  cols 
)
virtual

領域の確保

行列を確保します。
確保する行列のサイズは rows*cols < 2^28 を満たすように指定してください。

引数
[in]rows行サイズ (1~)
[in]cols列サイズ (1~)
戻り値
true正常
false異常
GetErrorCodeメソッドによりエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
解説:
このメソッドは、引数に指定する 行数、列数 の順序が、 SetSize とは入れ替わっていますが、 同様の動作をしますので、どちらを使用しても構いません。
バージョン
FVCLbasic v2.0.0.0: 新規追加
サンプルコード:
void Resize()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
// 3) 実行.
mat.Resize(5, 4);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Resize -> rows=%d, columns=%d\n"),mat.GetRows(), mat.GetColumns());
for (int r = 0; r < mat.GetRows(); r++)
{
for (int c = 0; c < mat.GetColumns(); c++)
{
_tprintf(_T("[%d,%d]=%f "), r, c, mat(r, c));
}
_tprintf(_T("\n"));
}
_tprintf(_T("\n"));
}
【関数の出力】
CFvMatrix.Resize -> rows=5, columns=4
[0,0]=0.000000 [0,1]=0.000000 [0,2]=0.000000 [0,3]=0.000000
[1,0]=0.000000 [1,1]=0.000000 [1,2]=0.000000 [1,3]=0.000000
[2,0]=0.000000 [2,1]=0.000000 [2,2]=0.000000 [2,3]=0.000000
[3,0]=0.000000 [3,1]=0.000000 [3,2]=0.000000 [3,3]=0.000000
[4,0]=0.000000 [4,1]=0.000000 [4,2]=0.000000 [4,3]=0.000000

参照
SetSize
FVCL::Data::CFvMatrix::Free ( )
virtual

行列の解放

参照
~CFvMatrix
FVCL::Data::CFvMatrix::Attach ( INT  rows,
INT  cols,
DOUBLE **  matrix 
)
virtual

アタッチ

引数に指定されたアドレスにアタッチします。
確保する行列のサイズは rows*cols < 2^28 を満たすように指定してください。
指定されたメモリアドレスは解放されません。

引数
[in]rows行サイズ (1~)
[in]cols列サイズ (1~)
[in]matrix2次元配列のアドレス
戻り値
true正常
false異常
GetErrorCodeメソッドによりエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
バージョン
FVCLbasic v2.0.0.0: 新規追加
FVCL::Data::CFvMatrix::Attach ( FMATRIX *  matrix)
virtual

アタッチ

引数に指定されたアドレスにアタッチします。
確保する行列のサイズは rows*cols < 2^28 を満たすように指定してください。
指定されたメモリアドレスは解放されません。

引数
[in]matrix行列構造体
通常は fnFIE_mat_aalloc で確保した行列を指定してください。
戻り値
true正常
false異常
GetErrorCodeメソッドによりエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
参照
CFvMatrix::SetHandle( FMATRIX *handle )
FVCL::Data::CFvMatrix::IsAttach ( bool  value)
virtual

アタッチ属性の設定

アタッチ属性を設定します。

引数
[in]valueアタッチ属性
  • true : アタッチします。アタッチ対象の領域はユーザー側で管理する必要があります。
  • false : アタッチしません。このクラスの内部に管理している領域はクラスが破棄される際に解放されます。

参照
CFvMatrix::SetHandle( FMATRIX *handle )
CFvMatrix::Attach( FMATRIX *matrix )
FVCL::Data::CFvMatrix::IsAttach ( ) const
virtual

アタッチ属性の取得

現在のアタッチ属性を取得します。

戻り値
trueアタッチしています。アタッチ対象の領域はユーザー側で管理する必要があります。
falseアタッチしていません。このクラスの内部に管理している領域はクラスが破棄される際に解放されます。
参照
CFvMatrix::SetHandle( FMATRIX *handle )
CFvMatrix::Attach( FMATRIX *matrix )
FVCL::Data::CFvMatrix::SetHandle ( FMATRIX *  handle)
virtual

ハンドルの設定

引数に指定されたアドレスを設定します。
確保する行列のサイズは rows*cols < 2^28 を満たすように指定してください。
指定されたメモリアドレスは、このクラスが破棄される際に解放されます。

引数
[in]handle行列構造体
通常は fnFIE_mat_aalloc で確保した行列を指定してください。
戻り値
常に true を返します。
参照
CFvMatrix::Attach( FMATRIX *matrix )
FVCL::Data::CFvMatrix::GetHandle ( ) const
virtual

行列構造体のアドレスの取得

ヒープ領域に確保された行列構造体のアドレスを取得します。

戻り値
行列構造体のアドレスを返します。
解説:
本関数は互換性の為に残しています。 FIE ライブラリとの相互運用を行う場合は GetFMATRIX をご使用ください。
参照
GetFMATRIX
FVCL::Data::CFvMatrix::GetFMATRIX ( ) const
virtual

行列構造体のアドレスの取得

ヒープ領域に確保された行列構造体のアドレスを取得します。

戻り値
行列構造体のアドレスを返します。
FIE:
FMATRIX
解説:
この関数は FIE ライブラリの行列演算関数に行列オブジェクトを渡す場合に使用します。
#include "FVCLbasic.h"
#include "fie.h"
void test_mat_inverse()
{
FMATRIX* a = mat.GetFMATRIX();
// 入力値をセット.
a->m[0][0] = 1.0; a->m[0][1] = 3.0; a->m[0][2] = 3.0;
a->m[1][0] = 4.0; a->m[1][1] =-2.0; a->m[1][2] = 1.0;
a->m[2][0] = 2.0; a->m[2][1] = 5.0; a->m[2][2] =-1.0;
// a^-1
fnFIE_mat_inverse( a );
}

FVCL::Data::CFvMatrix::GetRows ( ) const
virtual

行サイズの取得

行列の行サイズを取得します。
GetHeight メソッドと同様の意味です。

戻り値
行サイズを返します。
バージョン
FVCLbasic v2.0.0.0: 新規追加
参照
GetHeight
GetSize
FVCL::Data::CFvMatrix::GetColumns ( ) const
virtual

列サイズの取得

行列の列サイズを取得します。
GetWidth メソッドと同様の意味です。

戻り値
列サイズを返します。
バージョン
FVCLbasic v2.0.0.0: 新規追加
参照
GetWidth
GetSize
FVCL::Data::CFvMatrix::GetAddress ( ) const
virtual

行列データの先頭アドレス取得

行列データの先頭アドレスを取得します。

戻り値
行列データの先頭アドレスを返します。
サンプルコード:
const INT ROWS = 3;
const INT COLS = 3;
//CFvMatrix matrix(COLS,ROWS); // obsolete
CFvMatrix matrix = CFvMatrix::alloc(ROWS,COLS);
DOUBLE** adrs = matrix.GetAddress();
for( INT row=0; row<matrix.GetRows(); row++ )
{
for( INT col=0; col<matrix.GetColumns(); col++ )
{
if(row==col) adrs[row][col] = 1;
else adrs[row][col] = 0;
}
}

参照
CFvMatrix::operator[] ( INT row )
CFvMatrix::operator() ( INT row, INT col )
FVCL::Data::CFvMatrix::SetRowVector ( INT  row,
const CFvVector vector 
)
virtual

ベクトルの設定 (行指定)

指定されたベクトルの各要素を指定行の各要素にコピーします。

引数
[in]row行指標 (0~)
[in]vector設定するベクトル
戻り値
true正常
false異常
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
11 FVCL_ErrorCode::INVALID_PARAMETER 指標が不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
サンプルコード:
下記は、次元数 4 の vector に格納された各要素(10,11,12,13)を 行列(3x4)の行指標 1 の 4 つの要素に格納する例です。
vector(0)=10; vector(1)=11; vector(2)=12; vector(3)=13;
matrix.Resize( 3, 4 );
matrix.SetRowVector( 1, vector );

FVCL::Data::CFvMatrix::GetRowVector ( INT  row) const
virtual

ベクトルの取得 (行指定)

引数
[in]row行指標 (0~)
戻り値
指定行の各要素をベクトルクラスのインスタンスに格納して返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE 指メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 指標が不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
サンプルコード:
下記は、行列(3x4)の行指標 1 の 4 つの要素を vector に格納する例です。 vector の次元数は 4 に設定され、指標 0~3 にはそれぞれ 10,11,12,13 が格納されます。
matrix.Resize( 3, 4 );
matrix(0,0)= 0; matrix(0,1)= 1; matrix(0,2)= 2; matrix(0,3)= 3;
matrix(1,0)=10; matrix(1,1)=11; matrix(1,2)=12; matrix(1,3)=13;
matrix(2,0)=20; matrix(2,1)=21; matrix(2,2)=22; matrix(2,3)=23;
FVCL::Data::CFvVector vector = matrix.GetRowVector( 1 );

FVCL::Data::CFvMatrix::SetColVector ( INT  col,
const CFvVector vector 
)
virtual

ベクトルの設定 (列指定)

指定されたベクトルの各要素を指定列の各要素にコピーします。

引数
[in]col列指標 (0~)
[in]vector設定するベクトル
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
11 FVCL_ErrorCode::INVALID_PARAMETER 指標が不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
サンプルコード:
下記は、次元数 3 の vector に格納された各要素(2,12,22)を 行列(3x4)の列指標 2 の 3 つの要素に格納する例です。
vector(0)=2; vector(1)=12; vector(2)=22;
matrix.Resize( 3, 4 );
matrix.SetColVector( 2, vector );

FVCL::Data::CFvMatrix::GetColVector ( INT  col) const
virtual

ベクトルの取得 (行指定)

引数
[in]col列指標 (0~)
戻り値
指定行の各要素をベクトルクラスのインスタンスに格納して返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE 指メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 指標が不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
サンプルコード:
下記は、行列(3x4)の列指標 2 の 3 つの要素を vector に格納する例です。 vector の次元数は 3 に設定され、指標 0~2 にはそれぞれ 2,12,22 が格納されます。
matrix.Resize( 3, 4 );
matrix(0,0)= 0; matrix(0,1)= 1; matrix(0,2)= 2; matrix(0,3)= 3;
matrix(1,0)=10; matrix(1,1)=11; matrix(1,2)=12; matrix(1,3)=13;
matrix(2,0)=20; matrix(2,1)=21; matrix(2,2)=22; matrix(2,3)=23;
FVCL::Data::CFvVector vector = matrix.GetColVector( 2 );

FVCL::Data::CFvMatrix::SetSize ( INT  width,
INT  height 
)

サイズの設定

行列を確保します。
確保する行列のサイズは width*height < 2^28 を満たすように指定してください。

確保された行列は、0 で初期化されます。

引数
[in]width列数 (1~)
[in]height行数 (1~)
戻り値
true正常
false異常
GetErrorCodeメソッドによりエラーコードを取得できます。
エラーコード:
定数 内容
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数が間違っています。
解説:
このメソッドは、引数に指定する 行数、列数 の順序が、 Resize とは入れ替わっていますが、 同様の動作をしますので、どちらを使用しても構いません。
バージョン
FVCLbasic v1.1.0.0: 幅と高さの上限を設けました。
幅または高さの何れかが 16,384 以上の時に FVCL_ErrorCode::FAILED_TO_ALLOCATE を返します。
FVCLbasic v1.3.0.0: 幅と高さの上限を変更しました。
width*height が 2^28 以上の時に FVCL_ErrorCode::FAILED_TO_ALLOCATE を返します。
参照
GetSize
Resize
FVCL::Data::CFvMatrix::GetSize ( INT width,
INT height 
) const

サイズの取得

行列サイズを取得します。
引数に NULL を指定した場合、そのサイズは取得しません。

引数
[out]width列数
[out]height行数
戻り値
true正常
false異常
参照
SetSize
FVCL::Data::CFvMatrix::GetWidth ( ) const

列数の取得

戻り値
列数を返します。
参照
GetSize
GetColumns
FVCL::Data::CFvMatrix::GetHeight ( ) const

行数の取得

戻り値
行数を返します。
参照
GetSize
GetRows
FVCL::Data::CFvMatrix::SetValue ( INT  x,
INT  y,
DOUBLE  value 
)

行列データの設定

指定された位置に行列データを設定します。

引数
[in]x列( 0~GetWidth()-1 )
[in]y行( 0~GetHeight()-1 )
[in]value行列データ
戻り値
true正常
false異常
例外
FVCL::CFveBadAccessException行列配列が生成されていないか、設定位置が間違っています。
参照
GetValue
FVCL::Data::CFvMatrix::GetValue ( INT  x,
INT  y 
) const

行列データの取得

指定された位置の行列データの取得します。

引数
[in]x列( 0~GetWidth()-1 )
[in]y行( 0~GetHeight()-1 )
戻り値
行列データを返します。
例外
FVCL::CFveBadAccessException行列配列が生成されていないか、設定位置が間違っています。
参照
SetValue
FVCL::Data::CFvMatrix::operator[] ( INT  row)
virtual

行列データの先頭アドレス取得 (行指定)

行列データの指定行の先頭アドレスを取得します。

戻り値
引数 row に指定された行の先頭アドレスを返します。
サンプルコード:
const INT ROWS = 3;
const INT COLS = 3;
//CFvMatrix matrix(COLS,ROWS); // obsolete
CFvMatrix matrix = CFvMatrix::alloc(ROWS,COLS);
for( INT row=0; row<matrix.GetRows(); row++ )
{
for( INT col=0; col<matrix.GetColumns(); col++ )
{
if(row==col) matrix[row][col] = 1;
else matrix[row][col] = 0;
}
}

バージョン
FVCLbasic v2.0.0.0: 新規追加
FVCL::Data::CFvMatrix::operator[] ( INT  row) const
virtual

行列データの先頭アドレス取得 (行指定)

行列データの指定行の先頭アドレスを取得します。

戻り値
引数 row に指定された行の先頭アドレスを返します。
バージョン
FVCLbasic v2.0.0.0: 新規追加
FVCL::Data::CFvMatrix::operator() ( INT  row,
INT  col 
)
virtual

行列要素への参照 (行、列指定)

指定位置の行列要素への参照を取得します。

戻り値
引数 row、col に指定された要素への参照を返します。
サンプルコード:
const INT ROWS = 3;
const INT COLS = 3;
//CFvMatrix matrix(COLS,ROWS); // obsolete
CFvMatrix matrix = CFvMatrix::alloc(ROWS,COLS);
for( INT row=0; row<matrix.GetRows(); row++ )
{
for( INT col=0; col<matrix.GetColumns(); col++ )
{
if(row==col) matrix(row,col) = 1;
else matrix(row,col) = 0;
}
}

バージョン
FVCLbasic v2.0.0.0: 新規追加
FVCL::Data::CFvMatrix::operator() ( INT  row,
INT  col 
) const
virtual

行列要素への参照 (行、列指定)

指定位置の行列要素への参照を取得します。

戻り値
引数 row、col に指定された要素への参照を返します。
バージョン
FVCLbasic v2.0.0.0: 新規追加
FVCL::Data::CFvMatrix::operator= ( const CFvMatrix src)
virtual

代入オペレータ

同一クラスのオブジェクトの内容を複製して、自身に代入します。

引数
[in]srcコピー元
戻り値
自分自身の参照
例外
FVCL::CFveBadAllocExceptionメモリの確保に失敗しました。
FVCL::Data::CFvMatrix::operator== ( const CFvMatrix src) const
virtual

比較オペレータ(等価演算子)

同一クラスのオブジェクトの内容と比較します。

引数
[in]srcチェック元
戻り値
true一致
false不一致
サンプルコード:
void Equality()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvMatrix mat2(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
mat2 = mat;
bool result = false;
// 3) 計算実行.
if (mat == mat2)
result = true;
else
result = false;
// 確認) 処理結果の出力.
if (result)
_tprintf(_T("CFvMatrix.Equality -> Success.\n"));
else
_tprintf(_T("CFvMatrix.Equality -> Failed.\n"));
}
【関数の出力】
User::SampleCode::Data::Matrix::Equality
CFvMatrix.Equality -> Success.

参照
operator!=
FVCL::Data::CFvMatrix::operator!= ( const CFvMatrix src) const
virtual

比較オペレータ(非等価演算子)

同一クラスのオブジェクトの内容と比較します。

引数
[in]srcチェック元
戻り値
true不一致
false一致
サンプルコード:
void Inequality()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvMatrix mat2(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
mat2 = mat;
bool result = false;
// 3) 計算実行.
if (mat != mat2)
result = false;
else
result = true;
// 確認) 処理結果の出力.
if (result)
_tprintf(_T("CFvMatrix.Inequality -> Success.\n"));
else
_tprintf(_T("CFvMatrix.Inequality -> Failed.\n"));
}
【関数の出力】
User::SampleCode::Data::Matrix::Inequality
CFvMatrix.Inequality -> Success.

参照
operator==
FVCL::Data::CFvMatrix::operator+ ( const CFvMatrix src) const
virtual

加算オペレータ(行列)

自身と右辺値(行列)を加算した結果を返します。自身の内容は更新されません。
行列数が一致している必要があります。

引数
[in]src右辺値
戻り値
計算結果を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Addition_mm()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 2;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat1(rows, columns, NULL);
FVCL::Data::CFvMatrix mat2(rows, columns, NULL);
// 2) 行列の要素の設定.
mat1(0, 0) = 1.0; mat1(0, 1) = 3.0; mat1(0, 2) = 3.0;
mat1(1, 0) = 4.0; mat1(1, 1) =-2.0; mat1(1, 2) = 1.0;
mat2(0, 0) = 3.0; mat2(0, 1) = 8.0; mat2(0, 2) = 1.0;
mat2(1, 0) = 0.0; mat2(1, 1) =-2.0; mat2(1, 2) = 5.0;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat1 + mat2;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Addition(matrix+matrix)\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::Addition_mm
CFvMatrix.Addition(matrix+matrix)
[0][0]=4.000000 [0][1]=11.000000 [0][2]=4.000000
[1][0]=4.000000 [1][1]=-4.000000 [1][2]=6.000000

FVCL::Data::CFvMatrix::operator+ ( DOUBLE  scalar) const
virtual

加算オペレータ(スカラー)

自身と右辺値(スカラー)を加算した結果を返します。自身の内容は更新されません。

引数
[in]scalar右辺値
戻り値
計算結果を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Addition_ms()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) =-2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) =-1.0;
// 3) 計算実行.
double scalar = 8.0;
FVCL::Data::CFvMatrix result = mat + scalar;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Addition(matrix+scalar)\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::Addition_ms
CFvMatrix.Addition(matrix+scalar)
[0][0]=9.000000 [0][1]=11.000000 [0][2]=11.000000
[1][0]=12.000000 [1][1]=6.000000 [1][2]=9.000000
[2][0]=10.000000 [2][1]=13.000000 [2][2]=7.000000

FVCL::Data::CFvMatrix::operator+= ( const CFvMatrix src)
virtual

加算代入オペレータ(行列)

自身に右辺値(行列)を加算した結果を返します。自身の内容を更新します。
行列数が一致している必要があります。

引数
[in]src右辺値
戻り値
計算後の自身への参照を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
バージョン
FVCLbasic v2.0.0.0: 戻り値を自身のコピーでなく、自身への参照に変更しました。
サンプルコード:
void AdditionAssignment_mm()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 2;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat1(rows, columns, NULL);
FVCL::Data::CFvMatrix mat2(rows, columns, NULL);
// 2) 行列の要素の設定.
mat1(0, 0) = 1.0; mat1(0, 1) = 3.0; mat1(0, 2) = 3.0;
mat1(1, 0) = 4.0; mat1(1, 1) =-2.0; mat1(1, 2) = 1.0;
mat2(0, 0) = 3.0; mat2(0, 1) = 8.0; mat2(0, 2) = 1.0;
mat2(1, 0) = 0.0; mat2(1, 1) =-2.0; mat2(1, 2) = 5.0;
// 3) 計算実行.
mat1 += mat2;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.AdditionAssignment(matrix+matrix)\n"));
for (int row = 0; row < mat1.GetRows(); row++)
{
for (int column = 0; column < mat1.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat1(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::AdditionAssignment_mm
CFvMatrix.AdditionAssignment(matrix+matrix)
[0][0]=4.000000 [0][1]=11.000000 [0][2]=4.000000
[1][0]=4.000000 [1][1]=-4.000000 [1][2]=6.000000

参照
Add
FVCL::Data::CFvMatrix::operator+= ( DOUBLE  scalar)
virtual

加算代入オペレータ(スカラー)

自身に右辺値(スカラー)を加算した結果を返します。自身の内容を更新します。

引数
[in]scalar右辺値
戻り値
計算後の自身への参照を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
バージョン
FVCLbasic v2.0.0.0: 戻り値を自身のコピーでなく、自身への参照に変更しました。
サンプルコード:
void AdditionAssignment_ms()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) =-2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) =-1.0;
// 3) 計算実行.
double scalar = 8.0;
mat += scalar;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.AdditionAssignment(matrix+scalar)\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::AdditionAssignment_ms
CFvMatrix.AdditionAssignment(matrix+scalar)
[0][0]=9.000000 [0][1]=11.000000 [0][2]=11.000000
[1][0]=12.000000 [1][1]=6.000000 [1][2]=9.000000
[2][0]=10.000000 [2][1]=13.000000 [2][2]=7.000000

参照
AddScalar
FVCL::Data::CFvMatrix::operator- ( const CFvMatrix src) const
virtual

減算オペレータ(行列)

自身と右辺値(行列)を減算した結果を返します。自身の内容は更新されません。
行列数が一致している必要があります。

引数
[in]src右辺値
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Subtraction_mm()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 2;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvMatrix mat2(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat2(0, 0) = 3.0; mat2(0, 1) = 8.0; mat2(0, 2) = 1.0;
mat2(1, 0) = 0.0; mat2(1, 1) = -2.0; mat2(1, 2) = 5.0;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat - mat2;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Subtraction(matrix - matrix)\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::Subtraction_mm
CFvMatrix.Subtraction(matrix - matrix)
[0][0]=-2.000000 [0][1]=-5.000000 [0][2]=2.000000
[1][0]=4.000000 [1][1]=0.000000 [1][2]=-4.000000

FVCL::Data::CFvMatrix::operator- ( DOUBLE  scalar) const
virtual

減算オペレータ(スカラー)

自身と右辺値(スカラー)を減算した結果を返します。自身の内容は更新されません。

引数
[in]scalarスカラー
戻り値
計算結果を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Subtraction_ms()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
// 3) 計算実行.
double scalar = 8.0;
FVCL::Data::CFvMatrix result = mat - scalar;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Subtraction( matrix - scalar)\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::Subtraction_ms
CFvMatrix.Subtraction( matrix - scalar)
[0][0]=-7.000000 [0][1]=-5.000000 [0][2]=-5.000000
[1][0]=-4.000000 [1][1]=-10.000000 [1][2]=-7.000000
[2][0]=-6.000000 [2][1]=-3.000000 [2][2]=-9.000000

FVCL::Data::CFvMatrix::operator-= ( const CFvMatrix src)
virtual

減算代入オペレータ(行列)

自身に右辺値(行列)を減算した結果を返します。自身の内容を更新します。
行列数が一致している必要があります。

引数
[in]src右辺値
戻り値
計算後の自身への参照を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
バージョン
FVCLbasic v2.0.0.0: 戻り値を自身のコピーでなく、自身への参照に変更しました。
サンプルコード:
void SubtractionAssignment_mm()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 2;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvMatrix mat2(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat2(0, 0) = 3.0; mat2(0, 1) = 8.0; mat2(0, 2) = 1.0;
mat2(1, 0) = 0.0; mat2(1, 1) = -2.0; mat2(1, 2) = 5.0;
// 3) 計算実行.
mat -= mat2;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.SubtractionAssignment(matrix - matrix)\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::SubtractionAssignment_mm
CFvMatrix.SubtractionAssignment(matrix - matrix)
[0][0]=-2.000000 [0][1]=-5.000000 [0][2]=2.000000
[1][0]=4.000000 [1][1]=0.000000 [1][2]=-4.000000

参照
Sub
FVCL::Data::CFvMatrix::operator-= ( DOUBLE  scalar)
virtual

減算代入オペレータ(スカラー)

自身に右辺値(スカラー)を減算した結果を返します。自身の内容を更新します。

引数
[in]scalar右辺値
戻り値
計算後の自身への参照を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
バージョン
FVCLbasic v2.0.0.0: 戻り値を自身のコピーでなく、自身への参照に変更しました。
サンプルコード:
void SubtractionAssignment_ms()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
// 3) 計算実行.
double scalar = 8.0;
mat -= scalar;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.SubtractionAssignment_ms( matrix - scalar)\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::SubtractionAssignment_ms
CFvMatrix.SubtractionAssignment_ms( matrix - scalar)
[0][0]=-7.000000 [0][1]=-5.000000 [0][2]=-5.000000
[1][0]=-4.000000 [1][1]=-10.000000 [1][2]=-7.000000
[2][0]=-6.000000 [2][1]=-3.000000 [2][2]=-9.000000

参照
SubScalar
FVCL::Data::CFvMatrix::operator* ( const CFvMatrix src) const
virtual

乗算オペレータ(行列)

自身と右辺値(行列)を乗算した結果を返します。自身の内容は更新されません。
自身(左辺値)の列数と右辺値の行数が一致している必要があります。

引数
[in]src右辺値
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Multiply_mm()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 4;
int columns = 2;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvMatrix mat2(columns, rows + 1, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0;
mat(3, 0) = 3.0; mat(3, 1) = 1.0;
mat2(0, 0) = 3.0; mat2(0, 1) = 8.0; mat2(0, 2) = 1.0;
mat2(1, 0) = 0.0; mat2(1, 1) = -2.0; mat2(1, 2) = 5.0;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat * mat2;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Multiply(matrix * matrix)\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::Multiply_mm
CFvMatrix.Multiply(matrix * matrix)
[0][0]=3.000000 [0][1]=2.000000 [0][2]=16.000000 [0][3]=0.000000 [0][4]=0.000000
[1][0]=12.000000 [1][1]=36.000000 [1][2]=-6.000000 [1][3]=0.000000 [1][4]=0.000000
[2][0]=6.000000 [2][1]=6.000000 [2][2]=27.000000 [2][3]=0.000000 [2][4]=0.000000
[3][0]=9.000000 [3][1]=22.000000 [3][2]=8.000000 [3][3]=0.000000 [3][4]=0.000000

FIE:
fnFIE_mat_mul_aa
FVCL::Data::CFvMatrix::operator* ( DOUBLE  scalar) const
virtual

乗算オペレータ(スカラー)

自身(行列)の各成分と右辺値(スカラー)を乗算した結果を返します。
自身の内容は更新されません。

引数
[in]scalarスカラー
戻り値
計算結果を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Multiply_ms()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
// 3) 計算実行.
double scalar = 8.0;
FVCL::Data::CFvMatrix result = mat * scalar;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Multiply(matrix * scalar)\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::Multiply_mm
CFvMatrix.Multiply(matrix * scalar)
[0][0]=8.000000 [0][1]=24.000000 [0][2]=24.000000
[1][0]=32.000000 [1][1]=-16.000000 [1][2]=8.000000
[2][0]=16.000000 [2][1]=40.000000 [2][2]=-8.000000

FIE:
fnFIE_mat_mul_as
FVCL::Data::CFvMatrix::operator*= ( const CFvMatrix src)
virtual

乗算代入オペレータ(行列)

自身(行列)に右辺値(行列)を乗算した結果を返します。自身の内容を更新します。
自身(左辺値)の列数と右辺値の行数が一致している必要があります。

引数
[in]src右辺値
戻り値
計算後の自身への参照を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
バージョン
FVCLbasic v2.0.0.0: 戻り値を自身のコピーでなく、自身への参照に変更しました。
サンプルコード:
void MultiplicationAssignment_mm()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 4;
int columns = 2;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvMatrix mat2(columns, rows + 1, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0;
mat(3, 0) = 3.0; mat(3, 1) = 1.0;
mat2(0, 0) = 3.0; mat2(0, 1) = 8.0; mat2(0, 2) = 1.0;
mat2(1, 0) = 0.0; mat2(1, 1) = -2.0; mat2(1, 2) = 5.0;
// 3) 計算実行.
mat *= mat2;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.MultiplicationAssignment(matrix * matrix)\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::MultiplicationAssignment_mm
CFvMatrix.MultiplicationAssignment(matrix * matrix)
[0][0]=3.000000 [0][1]=2.000000 [0][2]=16.000000 [0][3]=0.000000 [0][4]=0.000000
[1][0]=12.000000 [1][1]=36.000000 [1][2]=-6.000000 [1][3]=0.000000 [1][4]=0.000000
[2][0]=6.000000 [2][1]=6.000000 [2][2]=27.000000 [2][3]=0.000000 [2][4]=0.000000
[3][0]=9.000000 [3][1]=22.000000 [3][2]=8.000000 [3][3]=0.000000 [3][4]=0.000000

参照
Mul
FVCL::Data::CFvMatrix::operator*= ( DOUBLE  scalar)
virtual

乗算代入オペレータ(スカラー)

自身(行列)の各成分に右辺値(スカラー)を乗算した結果を返します。
自身の内容を更新します。

引数
[in]scalar右辺値
戻り値
計算後の自身への参照を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
バージョン
FVCLbasic v2.0.0.0: 戻り値を自身のコピーでなく、自身への参照に変更しました。
サンプルコード:
void MultiplicationAssignment_ms()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
// 3) 計算実行.
double scalar = 8.0;
mat *= scalar;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.MultiplicationAssignment(matrix * scalar)\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::MultiplicationAssignment_ms
CFvMatrix.MultiplicationAssignment(matrix * scalar)
[0][0]=8.000000 [0][1]=24.000000 [0][2]=24.000000
[1][0]=32.000000 [1][1]=-16.000000 [1][2]=8.000000
[2][0]=16.000000 [2][1]=40.000000 [2][2]=-8.000000

参照
MulScalar
FVCL::Data::CFvMatrix::Add ( const CFvMatrix src)

加算 (行列+行列)

現在の行列と指定された行列を加算した結果を返します。
現在の行列の内容を更新します。

※ 2つの行列の次元は一致している必要が有ります。
※ 2つの行列が同一のインスタンスの場合も処理可能です。

引数
[in]src右辺値
戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Add()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 2;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvMatrix mat2(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) =-2.0; mat(1, 2) = 1.0;
mat2(0, 0) = 3.0; mat2(0, 1) = 8.0; mat2(0, 2) = 1.0;
mat2(1, 0) = 0.0; mat2(1, 1) =-2.0; mat2(1, 2) = 5.0;
// 3) 計算実行.
mat.Add(mat2);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Add\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::Add
CFvMatrix.Add
[0][0]=4.000000 [0][1]=11.000000 [0][2]=4.000000
[1][0]=4.000000 [1][1]=-4.000000 [1][2]=6.000000

FIE:
fnFIE_mat_sum_aa
FVCL::Data::CFvMatrix::AddScalar ( DOUBLE  scalar)

加算 (行列+スカラー)

現在の行列と指定された値を加算した結果を返します。
現在の行列の内容を更新します。

引数
[in]scalar右辺値
戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void AddScalar()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
// 3) 計算実行.
double scalar = 8.0;
mat.AddScalar(scalar);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.AddScalar\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
CFvMatrix.AddScalar
[0][0]=9.000000 [0][1]=11.000000 [0][2]=11.000000
[1][0]=12.000000 [1][1]=6.000000 [1][2]=9.000000
[2][0]=10.000000 [2][1]=13.000000 [2][2]=7.000000

FIE:
fnFIE_mat_sum_as
FVCL::Data::CFvMatrix::Sub ( const CFvMatrix src)

減算 (行列-行列)

現在の行列から指定された行列を減算した結果を返します。
現在の行列の内容を更新します。

※ 2つの行列の次元は一致している必要が有ります。
※ 2つの行列が同一のインスタンスの場合も処理可能です。

引数
[in]src右辺値
戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Sub()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 2;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvMatrix mat2(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) =-2.0; mat(1, 2) = 1.0;
mat2(0, 0) = 3.0; mat2(0, 1) = 8.0; mat2(0, 2) = 1.0;
mat2(1, 0) = 0.0; mat2(1, 1) =-2.0; mat2(1, 2) = 5.0;
// 3) 計算実行.
mat.Sub(mat2);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Sub\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::Sub
CFvMatrix.Sub
[0][0]=-2.000000 [0][1]=-5.000000 [0][2]=2.000000
[1][0]=4.000000 [1][1]=0.000000 [1][2]=-4.000000

FIE:
fnFIE_mat_sub_aa
FVCL::Data::CFvMatrix::SubScalar ( DOUBLE  scalar)

減算 (行列-スカラー)

現在の行列から指定された値を減算した結果を返します。
現在の行列の内容を更新します。

引数
[in]scalar右辺値
戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void SubScalar()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
// 3) 計算実行.
double scalar = 8.0;
mat.SubScalar(scalar);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.SubScalar\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::SubScalar
CFvMatrix.SubScalar
[0][0]=-7.000000 [0][1]=-5.000000 [0][2]=-5.000000
[1][0]=-4.000000 [1][1]=-10.000000 [1][2]=-7.000000
[2][0]=-6.000000 [2][1]=-3.000000 [2][2]=-9.000000

FIE:
fnFIE_mat_sub_as
FVCL::Data::CFvMatrix::Mul ( const CFvMatrix src)

乗算 (行列*行列)

現在の行列と指定された行列を乗算した結果を返します。
現在の行列の内容を更新します。

※ 2つの行列の次元は一致している必要が有ります。
※ 2つの行列が同一のインスタンスの場合も処理可能です。

引数
[in]src右辺値
戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Mul()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 4;
int columns = 2;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvMatrix mat2(columns, rows + 1, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0;
mat(3, 0) = 3.0; mat(3, 1) = 1.0;
mat2(0, 0) = 3.0; mat2(0, 1) = 8.0; mat2(0, 2) = 1.0;
mat2(1, 0) = 0.0; mat2(1, 1) = -2.0; mat2(1, 2) = 5.0;
// 3) 計算実行.
mat.Mul(mat2);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Mul\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::Mul
CFvMatrix.Mul
[0][0]=3.000000 [0][1]=2.000000 [0][2]=16.000000 [0][3]=0.000000 [0][4]=0.000000
[1][0]=12.000000 [1][1]=36.000000 [1][2]=-6.000000 [1][3]=0.000000 [1][4]=0.000000
[2][0]=6.000000 [2][1]=6.000000 [2][2]=27.000000 [2][3]=0.000000 [2][4]=0.000000
[3][0]=9.000000 [3][1]=22.000000 [3][2]=8.000000 [3][3]=0.000000 [3][4]=0.000000

FIE:
fnFIE_mat_mul_aa
FVCL::Data::CFvMatrix::MulScalar ( DOUBLE  scalar)

乗算 (行列*スカラー)

現在の行列と指定された値を乗算した結果を返します。
現在の行列の内容を更新します。

引数
[in]scalar右辺値
戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void MulScalar()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
// 3) 計算実行.
double scalar = 8.0;
mat.MulScalar(scalar);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.MulScalar\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::MulScalar
CFvMatrix.MulScalar
[0][0]=8.000000 [0][1]=24.000000 [0][2]=24.000000
[1][0]=32.000000 [1][1]=-16.000000 [1][2]=8.000000
[2][0]=16.000000 [2][1]=40.000000 [2][2]=-8.000000

FIE:
fnFIE_mat_mul_as
FVCL::Data::CFvMatrix::eye ( )

単位行列の作成

現在の行列の値を単位行列に設定します。
対角成分が 1.0 になり、他の成分は 0.0 になります。
行列は、正方行列でなければなりません。

例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
11 FVCL_ErrorCode::INVALID_PARAMETER 行列が不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
サンプルコード:
void eye()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = -0.1; mat(0, 1) = 0.2; mat(0, 2) = -0.3;
mat(1, 0) = 1.1; mat(1, 1) = -1.2; mat(1, 2) = 1.3;
mat(2, 0) = -2.1; mat(2, 1) = 2.2; mat(2, 2) = -2.3;
// 3) 計算実行.
mat.eye();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.eye\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::eye
CFvMatrix.eye
[0][0]=1.000000 [0][1]=0.000000 [0][2]=0.000000
[1][0]=0.000000 [1][1]=1.000000 [1][2]=0.000000
[2][0]=0.000000 [2][1]=0.000000 [2][2]=1.000000

FIE:
fnFIE_mat_eye
FVCL::Data::CFvMatrix::ones ( )

要素が全て1の行列の作成

現在の行列の成分を全て 1.0 に設定します。

例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
11 FVCL_ErrorCode::INVALID_PARAMETER 行列が不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
サンプルコード:
void ones()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = -0.1; mat(0, 1) = 0.2; mat(0, 2) = -0.3;
mat(1, 0) = 1.1; mat(1, 1) = -1.2; mat(1, 2) = 1.3;
mat(2, 0) = -2.1; mat(2, 1) = 2.2; mat(2, 2) = -2.3;
// 3) 計算実行.
mat.ones();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.ones\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::ones
CFvMatrix.ones
[0][0]=1.000000 [0][1]=1.000000 [0][2]=1.000000
[1][0]=1.000000 [1][1]=1.000000 [1][2]=1.000000
[2][0]=1.000000 [2][1]=1.000000 [2][2]=1.000000

FIE:
fnFIE_mat_ones
FVCL::Data::CFvMatrix::zeros ( )

要素が全て0の行列の作成

現在の行列の成分を全て 0.0 に設定します。

例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
11 FVCL_ErrorCode::INVALID_PARAMETER 行列が不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
サンプルコード:
void zeros()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = -0.1; mat(0, 1) = 0.2; mat(0, 2) = -0.3;
mat(1, 0) = 1.1; mat(1, 1) = -1.2; mat(1, 2) = 1.3;
mat(2, 0) = -2.1; mat(2, 1) = 2.2; mat(2, 2) = -2.3;
// 3) 計算実行.
mat.zeros();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.zeros\n"));
for (int row = 0; row < mat.GetRows(); row++)
{
for (int column = 0; column < mat.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, mat(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::zeros
CFvMatrix.zeros
[0][0]=0.000000 [0][1]=0.000000 [0][2]=0.000000
[1][0]=0.000000 [1][1]=0.000000 [1][2]=0.000000
[2][0]=0.000000 [2][1]=0.000000 [2][2]=0.000000

FIE:
fnFIE_mat_zeros
FVCL::Data::CFvMatrix::rand ( )

[[OSS]] ランダム行列の作成

入力された行列の成分に全てランダムな値を設定します。
設定される値の範囲は [2^(-53), 1-2^(-53)] です。

例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが無効です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
FIE:
fnFIE_mat_rand
FVCL::Data::CFvMatrix::triu ( INT  k) const

上三角成分の抽出

MxN 行列 の上三角部を取り出し、行列オブジェクトに格納して返します。 現在の行列の内容は更新されません。

k は対角位置を指定するパラメータで、k=0 は主対角を示します。 k>0のとき主対角よりも上側の対角を、k<0 のとき主対角成分より下側の対角を示します。 min(M,N)≦|k| と指定した場合、エラーとなります。 対角成分を除く下三角部は 0 が格納されます。

引数
[in]k対角位置
戻り値
結果が格納された行列オブジェクトを返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void triu()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 4;
int columns = 4;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0; mat(0, 3) = 9.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0; mat(1, 3) = 3.0;
mat(2, 0) = 6.1; mat(2, 1) = -4.0; mat(2, 2) = 8.0; mat(2, 3) = 5.0;
mat(3, 0) = -2.0; mat(3, 1) = 3.0; mat(3, 2) = -7.0; mat(3, 3) = 3.0;
// 3) 計算実行.
int k = 1;
FVCL::Data::CFvMatrix result = mat.triu( k );
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.triu\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::triu
CFvMatrix.triu
[0][0]=0.000000 [0][1]=3.000000 [0][2]=3.000000 [0][3]=9.000000
[1][0]=0.000000 [1][1]=0.000000 [1][2]=1.000000 [1][3]=3.000000
[2][0]=0.000000 [2][1]=0.000000 [2][2]=0.000000 [2][3]=5.000000
[3][0]=0.000000 [3][1]=0.000000 [3][2]=0.000000 [3][3]=0.000000

FIE:
fnFIE_mat_triu
FVCL::Data::CFvMatrix::tril ( INT  k) const

下三角成分の抽出

MxN 行列 の下三角部を取り出し、行列オブジェクトに格納して返します。 現在の行列の内容は更新されません。

k は対角位置を指定するパラメータで、k=0 は主対角を示します。 k>0のとき主対角よりも上側の対角を、k<0 のとき主対角成分より下側の対角を示します。 min(M,N)≦|k| と指定した場合、エラーとなります。 対角成分を除く上三角部は 0 が格納されます。

引数
[in]k対角位置
戻り値
結果が格納された行列オブジェクトを返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void tril( )
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 4;
int columns = 4;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0; mat(0, 3) = 9.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0; mat(1, 3) = 3.0;
mat(2, 0) = 6.1; mat(2, 1) = -4.0; mat(2, 2) = 8.0; mat(2, 3) = 5.0;
mat(3, 0) = -2.0; mat(3, 1) = 3.0; mat(3, 2) = -7.0; mat(3, 3) = 3.0;
// 3) 計算実行.
int k = 0;
FVCL::Data::CFvMatrix result = mat.tril( k );
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.tril\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::tril
CFvMatrix.tril
[0][0]=1.000000 [0][1]=0.000000 [0][2]=0.000000 [0][3]=0.000000
[1][0]=4.000000 [1][1]=-2.000000 [1][2]=0.000000 [1][3]=0.000000
[2][0]=6.100000 [2][1]=-4.000000 [2][2]=8.000000 [2][3]=0.000000
[3][0]=-2.000000 [3][1]=3.000000 [3][2]=-7.000000 [3][3]=3.000000

FIE:
fnFIE_mat_tril
FVCL::Data::CFvMatrix::circshift ( INT  sx,
INT  sy 
) const

行列要素の循環シフト

現在の行列の要素を sx, sy で指定された分だけ循環的にシフトした結果を 行列オブジェクトに格納して返します。 現在の行列の内容は更新されません。

sx が正の場合、右方向へシフトし、負の場合、左方向へシフトします。
sy が正の場合、下方向へシフトし、負の場合、上方向へシフトします。

引数
[in]sx列方向循環シフト量
[in]sy行方向循環シフト量
戻り値
結果が格納された行列オブジェクトを返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
サンプルコード:
void circshift()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 4;
int columns = 4;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 5.0; mat(0, 2) = 9.0; mat(0, 3) =13.0;
mat(1, 0) = 2.0; mat(1, 1) = 6.0; mat(1, 2) =10.0; mat(1, 3) =14.0;
mat(2, 0) = 3.0; mat(2, 1) = 7.0; mat(2, 2) =11.0; mat(2, 3) =15.0;
mat(3, 0) = 4.0; mat(3, 1) = 8.0; mat(3, 2) =12.0; mat(3, 3) =16.0;
// 3) 計算実行.
int sx = 1;
int sy = 0;
FVCL::Data::CFvMatrix result = mat.circshift( sx, sy );
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.circshift\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::circshift
CFvMatrix.circshift
[0][0]=13.000000 [0][1]=1.000000 [0][2]=5.000000 [0][3]=9.000000
[1][0]=14.000000 [1][1]=2.000000 [1][2]=6.000000 [1][3]=10.000000
[2][0]=15.000000 [2][1]=3.000000 [2][2]=7.000000 [2][3]=11.000000
[3][0]=16.000000 [3][1]=4.000000 [3][2]=8.000000 [3][3]=12.000000

FIE:
fnFIE_mat_circshift
FVCL::Data::CFvMatrix::cat_horz ( const CFvMatrix right) const

行列要素の水平方向結合

現在の行列と引数に指定された行列を水平方向に結合した行列を行列オブジェクトに格納して返します。 現在の行列の内容は更新されません。

現在の行列 と 指定された行列 right の行数は一致している必要があります。 結合後の行列は、2つの行列と行数は同じで、列数は2つの行列の列数を加算した列数になります。

引数
[in]right右側に結合する行列
戻り値
結果が格納された行列オブジェクトを返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
サンプルコード:
void cat_horz()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 2;
int columns = 2;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat1(rows, columns, NULL);
FVCL::Data::CFvMatrix mat2(rows, columns, NULL);
// 2) 行列の要素の設定.
mat1(0, 0) = 1.0; mat1(0, 1) = 5.0;
mat1(1, 0) = 2.0; mat1(1, 1) = 6.0;
mat2(0, 0) = 3.0; mat2(0, 1) = 7.0;
mat2(1, 0) = 4.0; mat2(1, 1) = 8.0;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat1.cat_horz( mat2 );
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.cat_horz\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < columns *2 ; column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::cat_horz
CFvMatrix.cat_horz
[0][0]=1.000000 [0][1]=5.000000 [0][2]=3.000000 [0][3]=7.000000
[1][0]=2.000000 [1][1]=6.000000 [1][2]=4.000000 [1][3]=8.000000

FIE:
fnFIE_mat_horzcat
FVCL::Data::CFvMatrix::cat_vert ( const CFvMatrix bottom) const

行列要素の垂直方向結合

現在の行列と引数に指定された行列を垂直方向に結合した行列を行列オブジェクトに格納して返します。 現在の行列の内容は更新されません。

現在の行列 と 指定された行列 right の列数は一致している必要があります。 結合後の行列は、2つの行列と列数は同じで、行数は2つの行列の行数を加算した行数になります。

引数
[in]bottom下に結合する行列
戻り値
結果が格納された行列オブジェクトを返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
サンプルコード:
void cat_vert()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 2;
int columns = 2;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat1(rows, columns, NULL);
FVCL::Data::CFvMatrix mat2(rows, columns, NULL);
// 2) 行列の要素の設定.
mat1(0, 0) = 1.0; mat1(0, 1) = 5.0;
mat1(1, 0) = 2.0; mat1(1, 1) = 6.0;
mat2(0, 0) = 3.0; mat2(0, 1) = 7.0;
mat2(1, 0) = 4.0; mat2(1, 1) = 8.0;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat1.cat_vert( mat2 );
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.cat_vert\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::cat_vert
CFvMatrix.cat_vert
[0][0]=1.000000 [0][1]=5.000000
[1][0]=2.000000 [1][1]=6.000000
[2][0]=3.000000 [2][1]=7.000000
[3][0]=4.000000 [3][1]=8.000000

FIE:
fnFIE_mat_vertcat
FVCL::Data::CFvMatrix::flipdim_horz ( ) const

行列要素の反転 (左右反転)

現在の行列を列方向に左右反転させた行列を行列オブジェクトに格納して返します。 現在の行列の内容は更新されません。

戻り値
現在の行列を列方向に左右反転させた行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
サンプルコード:
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 4;
int columns = 4;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 5.0; mat(0, 2) = 9.0; mat(0, 3) =13.0;
mat(1, 0) = 2.0; mat(1, 1) = 6.0; mat(1, 2) =10.0; mat(1, 3) =14.0;
mat(2, 0) = 3.0; mat(2, 1) = 7.0; mat(2, 2) =11.0; mat(2, 3) =15.0;
mat(3, 0) = 4.0; mat(3, 1) = 8.0; mat(3, 2) =12.0; mat(3, 3) =16.0;
// 3) 計算実行.
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.flipdim_horz\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::flipdim_horz
CFvMatrix.flipdim_horz
[0][0]=13.000000 [0][1]=9.000000 [0][2]=5.000000 [0][3]=1.000000
[1][0]=14.000000 [1][1]=10.000000 [1][2]=6.000000 [1][3]=2.000000
[2][0]=15.000000 [2][1]=11.000000 [2][2]=7.000000 [2][3]=3.000000
[3][0]=16.000000 [3][1]=12.000000 [3][2]=8.000000 [3][3]=4.000000

FIE:
fnFIE_mat_flipdim
FVCL::Data::CFvMatrix::flipdim_vert ( ) const

行列要素の反転 (上下反転)

現在の行列を列方向に上下反転させた行列を行列オブジェクトに格納して返します。 現在の行列の内容は更新されません。

戻り値
現在の行列を行方向に上下反転させた行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
サンプルコード:
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 4;
int columns = 4;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 5.0; mat(0, 2) = 9.0; mat(0, 3) =13.0;
mat(1, 0) = 2.0; mat(1, 1) = 6.0; mat(1, 2) =10.0; mat(1, 3) =14.0;
mat(2, 0) = 3.0; mat(2, 1) = 7.0; mat(2, 2) =11.0; mat(2, 3) =15.0;
mat(3, 0) = 4.0; mat(3, 1) = 8.0; mat(3, 2) =12.0; mat(3, 3) =16.0;
// 3) 計算実行.
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.flipdim_vert\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::flipdim_vert
CFvMatrix.flipdim_vert
[0][0]=4.000000 [0][1]=8.000000 [0][2]=12.000000 [0][3]=16.000000
[1][0]=3.000000 [1][1]=7.000000 [1][2]=11.000000 [1][3]=15.000000
[2][0]=2.000000 [2][1]=6.000000 [2][2]=10.000000 [2][3]=14.000000
[3][0]=1.000000 [3][1]=5.000000 [3][2]=9.000000 [3][3]=13.000000

FIE:
fnFIE_mat_flipdim
FVCL::Data::CFvMatrix::Inverse ( UINT  option = 1) const

逆行列の生成

逆行列を求めます。 求められた逆行列は、戻り値で出力されます。
現在の行列の内容は更新されません。

行列は必ず、正方行列でなければなりません。

引数
[in]optionオプション
  • 0 : Gauss-Jordan法
  • 1 : LU分解法

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Inverse(int option)
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.Inverse(option);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Inverse(option=%d)\n"), option);
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
void Inverse0()
{
Inverse(0);
}
void Inverse1()
{
Inverse(1);
}
【関数の出力】サンプルコードのInverse0() を実施した場合
User::SampleCode::Data::Matrix::Inverse
CFvMatrix.Inverse(option=0)
[0][0]=-0.034483 [0][1]=0.206897 [0][2]=0.103448
[1][0]=0.068966 [1][1]=-0.080460 [1][2]=0.126437
[2][0]=0.275862 [2][1]=0.011494 [2][2]=-0.160920

【関数の出力】サンプルコードのInverse1() を実施した場合
User::SampleCode::Data::Matrix::Inverse
CFvMatrix.Inverse(option=1)
[0][0]=-0.034483 [0][1]=0.206897 [0][2]=0.103448
[1][0]=0.068966 [1][1]=-0.080460 [1][2]=0.126437
[2][0]=0.275862 [2][1]=0.011494 [2][2]=-0.160920

FIE:

fnFIE_mat_inverse

fnFIE_mat_inverse2

FVCL::Data::CFvMatrix::solve ( const CFvVector vector) const

連立一次方程式の計算

ax=b をLU分解を使用して解きます。

  • a ... 現在の行列
  • b ... 引数に指定されたベクトル
  • x ... 返されるベクトル


a は NxN 行列(正方行列)、b は次元 N でなければなりません。 a, b の次元が不正な場合は例外を発行します。

現在の行列の内容は更新されません。

引数
[in]vector連立一次方程式の右辺
戻り値
次元数 N のベクトルを返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void solve()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvVector vector(rows);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
vector[0] = 3.0; vector[1] = 6.0; vector[2] = 8.0;
// 3) 計算実行.
FVCL::Data::CFvVector result = mat.solve(vector);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.solve\n"));
for (int dim = 0; dim < result.GetDim(); dim++)
{
_tprintf(_T("[%d]=%f "), dim, result[dim]);
}
_tprintf(_T("\n"));
}
【関数の出力】
User::SampleCode::Data::Matrix::solve
CFvMatrix.solve
[0]=1.965517 [1]=0.735632 [2]=-0.390805

FIE:
fnFIE_mat_solve
FVCL::Data::CFvMatrix::transpose ( ) const

行列の転置

現在の行列の転置行列を返します。 現在の行列の内容は更新されません。

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void transpose()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 2;
int columns = 4;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 5.0; mat(0, 2) = 9.0; mat(0, 3) = 13.0;
mat(1, 0) = 2.0; mat(1, 1) = 6.0; mat(1, 2) = 10.0; mat(1, 3) = 14.0;
// 3) 計算実行.
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.transpose\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::transpose
CFvMatrix.transpose
[0][0]=1.000000 [0][1]=2.000000
[1][0]=5.000000 [1][1]=6.000000
[2][0]=9.000000 [2][1]=10.000000
[3][0]=13.000000 [3][1]=14.000000

FIE:
fnFIE_mat_trans
FVCL::Data::CFvMatrix::trace ( ) const

行列のトレースの計算

現在の行列(正方行列)のトレース(対角成分の和)を計算します。
現在の行列の内容は更新されません。

戻り値
算出された値を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void trace()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 4;
int columns = 4;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 5.0; mat(0, 2) = 9.0; mat(0, 3) = 13.0;
mat(1, 0) = 2.0; mat(1, 1) = 6.0; mat(1, 2) = 10.0; mat(1, 3) = 14.0;
mat(2, 0) = 3.0; mat(2, 1) = 7.0; mat(2, 2) = 11.0; mat(2, 3) = 15.0;
mat(3, 0) = 4.0; mat(3, 1) = 8.0; mat(3, 2) = 12.0; mat(3, 3) = 16.0;
// 3) 計算実行.
double result = mat.trace();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.trace\n"));
_tprintf(_T("result = %f\n"), result);
}
【関数の出力】
User::SampleCode::Data::Matrix::trace
CFvMatrix.trace
result = 34.000000

FIE:
fnFIE_mat_trace
FVCL::Data::CFvMatrix::max_elem ( ) const

成分の最大値抽出

現在の行列の成分のうち、最大の値を返します。
現在の行列の内容は更新されません。

戻り値
算出された値を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void max_elem()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = -0.1; mat(0, 1) = 0.2; mat(0, 2) = -0.3;
mat(1, 0) = 1.1; mat(1, 1) = -1.2; mat(1, 2) = 1.3;
mat(2, 0) = -2.1; mat(2, 1) = 2.2; mat(2, 2) = -2.3;
// 3) 計算実行.
double result = mat.max_elem();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.max_elem\n"));
_tprintf(_T("max_elem : %f\n"), result);
}
【関数の出力】
User::SampleCode::Data::Matrix::max_elem
CFvMatrix.max_elem
max_elem : 2.200000

FIE:
fnFIE_mat_max
FVCL::Data::CFvMatrix::min_elem ( ) const

成分の最小値抽出

現在の行列の成分のうち、最小の値を返します。
現在の行列の内容は更新されません。

戻り値
算出された値を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void min_elem()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = -0.1; mat(0, 1) = 0.2; mat(0, 2) = -0.3;
mat(1, 0) = 1.1; mat(1, 1) = -1.2; mat(1, 2) = 1.3;
mat(2, 0) = -2.1; mat(2, 1) = 2.2; mat(2, 2) = -2.3;
// 3) 計算実行.
double result = mat.min_elem();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.min_elem\n"));
_tprintf(_T("min_elem : %f\n"), result );
}
【関数の出力】
User::SampleCode::Data::Matrix::min_elem
CFvMatrix.min_elem
min_elem : -2.300000

FIE:
fnFIE_mat_min
FVCL::Data::CFvMatrix::asin ( ) const

各成分の asin の計算

現在の行列の各成分に対して asin を計算した結果を返します。
現在の行列の内容は更新されません。

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void asin()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 0.5000; mat(0, 1) = 0.5000; mat(0, 2) = 0.5000;
mat(1, 0) = 0.7071; mat(1, 1) = 0.7071; mat(1, 2) = 0.7071;
mat(2, 0) = 0.8660; mat(2, 1) = 0.8660; mat(2, 2) = 0.8660;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.asin();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.asin\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::asin
CFvMatrix.asin
[0][0]=0.523599 [0][1]=0.523599 [0][2]=0.523599
[1][0]=0.785389 [1][1]=0.785389 [1][2]=0.785389
[2][0]=1.047147 [2][1]=1.047147 [2][2]=1.047147

FIE:
fnFIE_mat_asin
FVCL::Data::CFvMatrix::acos ( ) const

各成分の acos の計算

現在の行列の各成分に対して acos を計算した結果を返します。
現在の行列の内容は更新されません。

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void acos()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 0.8660; mat(0, 1) = 0.8660; mat(0, 2) = 0.8660;
mat(1, 0) = 0.7071; mat(1, 1) = 0.7071; mat(1, 2) = 0.7071;
mat(2, 0) = 0.5000; mat(2, 1) = 0.5000; mat(2, 2) = 0.5000;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.acos();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.acos\n"));
for( int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::acos
CFvMatrix.acos
[0][0]=0.523650 [0][1]=0.523650 [0][2]=0.523650
[1][0]=0.785408 [1][1]=0.785408 [1][2]=0.785408
[2][0]=1.047198 [2][1]=1.047198 [2][2]=1.047198

FIE:
fnFIE_mat_acos
FVCL::Data::CFvMatrix::atan ( ) const

各成分の atan の計算

現在の行列の各成分に対して atan を計算した結果を返します。
現在の行列の内容は更新されません。

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void atan()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 0.5774; mat(0, 1) = 0.5774; mat(0, 2) = 0.5774;
mat(1, 0) = 1.0000; mat(1, 1) = 1.0000; mat(1, 2) = 1.0000;
mat(2, 0) = 1.7321; mat(2, 1) = 1.7321; mat(2, 2) = 1.7321;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.atan();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.atan\n"));
for( int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::atan
CFvMatrix.atan
[0][0]=0.523636 [0][1]=0.523636 [0][2]=0.523636
[1][0]=0.785398 [1][1]=0.785398 [1][2]=0.785398
[2][0]=1.047210 [2][1]=1.047210 [2][2]=1.047210

FIE:
fnFIE_mat_atan
FVCL::Data::CFvMatrix::atan2 ( const CFvMatrix ax) const

各成分の atan2 の計算

現在の行列と指定された行列の各成分に対して atan2 を計算した結果を返します。
現在の行列の内容は更新されません。

※ 現在の行列を y 成分、指定された行列を x 成分として扱います。 ※ 2つの行列の次元は等しくなければなりません。

引数
[in]ax入力行列 (x 成分)
戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void atan2()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvMatrix mat_ax(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 0.5000; mat(0, 1) = 0.5000; mat(0, 2) = 0.5000;
mat(1, 0) = 0.7071; mat(1, 1) = 0.7071; mat(1, 2) = 0.7071;
mat(2, 0) = 0.8660; mat(2, 1) = 0.8660; mat(2, 2) = 0.8660;
mat_ax(0, 0) = 0.8660; mat_ax(0, 1) = 0.8660; mat_ax(0, 2) = 0.8660;
mat_ax(1, 0) = 0.7071; mat_ax(1, 1) = 0.7071; mat_ax(1, 2) = 0.7071;
mat_ax(2, 0) = 0.5000; mat_ax(2, 1) = 0.5000; mat_ax(2, 2) = 0.5000;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.atan2(mat_ax);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.atan2\n"));
for( int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::atan2
CFvMatrix.atan2
[0][0]=0.523611 [0][1]=0.523611 [0][2]=0.523611
[1][0]=0.785398 [1][1]=0.785398 [1][2]=0.785398
[2][0]=1.047185 [2][1]=1.047185 [2][2]=1.047185

FIE:
fnFIE_mat_atan2
FVCL::Data::CFvMatrix::cos ( ) const

各成分の cos の計算

現在の行列の各成分に対して cos を計算した結果を返します。
現在の行列の内容は更新されません。

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void cos()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = FVCL::Math::Pi / 6; mat(0, 1) = FVCL::Math::Pi / 6; mat(0, 2) = FVCL::Math::Pi / 6;
mat(1, 0) = FVCL::Math::Pi / 4; mat(1, 1) = FVCL::Math::Pi / 4; mat(1, 2) = FVCL::Math::Pi / 4;
mat(2, 0) = FVCL::Math::Pi / 3; mat(2, 1) = FVCL::Math::Pi / 3; mat(2, 2) = FVCL::Math::Pi / 3;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.cos();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.cos\n"));
for( int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::cos
CFvMatrix.cos
[0][0]=0.866025 [0][1]=0.866025 [0][2]=0.866025
[1][0]=0.707107 [1][1]=0.707107 [1][2]=0.707107
[2][0]=0.500000 [2][1]=0.500000 [2][2]=0.500000

FIE:
fnFIE_mat_cos
FVCL::Data::CFvMatrix::sin ( ) const

各成分の sin の計算

現在の行列の各成分に対して sin を計算した結果を返します。
現在の行列の内容は更新されません。

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void sin()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = FVCL::Math::Pi / 6; mat(0, 1) = FVCL::Math::Pi / 6; mat(0, 2) = FVCL::Math::Pi / 6;
mat(1, 0) = FVCL::Math::Pi / 4; mat(1, 1) = FVCL::Math::Pi / 4; mat(1, 2) = FVCL::Math::Pi / 4;
mat(2, 0) = FVCL::Math::Pi / 3; mat(2, 1) = FVCL::Math::Pi / 3; mat(2, 2) = FVCL::Math::Pi / 3;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.sin();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.sin\n"));
for( int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::sin
CFvMatrix.sin
[0][0]=0.500000 [0][1]=0.500000 [0][2]=0.500000
[1][0]=0.707107 [1][1]=0.707107 [1][2]=0.707107
[2][0]=0.866025 [2][1]=0.866025 [2][2]=0.866025

FIE:
fnFIE_mat_sin
FVCL::Data::CFvMatrix::tan ( ) const

各成分の tan の計算

現在の行列の各成分に対して tan を計算した結果を返します。
現在の行列の内容は更新されません。

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void tan()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = FVCL::Math::Pi / 6; mat(0, 1) = FVCL::Math::Pi / 6; mat(0, 2) = FVCL::Math::Pi / 6;
mat(1, 0) = FVCL::Math::Pi / 4; mat(1, 1) = FVCL::Math::Pi / 4; mat(1, 2) = FVCL::Math::Pi / 4;
mat(2, 0) = FVCL::Math::Pi / 3; mat(2, 1) = FVCL::Math::Pi / 3; mat(2, 2) = FVCL::Math::Pi / 3;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.tan();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.tan\n"));
for( int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::tan
CFvMatrix.tan
[0][0]=0.577350 [0][1]=0.577350 [0][2]=0.577350
[1][0]=1.000000 [1][1]=1.000000 [1][2]=1.000000
[2][0]=1.732051 [2][1]=1.732051 [2][2]=1.732051

FIE:
fnFIE_mat_tan
FVCL::Data::CFvMatrix::exp ( ) const

各成分の exp の計算

現在の行列の各成分に対して exp を計算した結果を返します。
現在の行列の内容は更新されません。

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void exp()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = -0.1; mat(0, 1) = 0.2; mat(0, 2) = -0.3;
mat(1, 0) = 1.1; mat(1, 1) = -1.2; mat(1, 2) = 1.3;
mat(2, 0) = -2.1; mat(2, 1) = 2.2; mat(2, 2) = -2.3;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.exp();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.exp\n"));
for( int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::exp
CFvMatrix.exp
[0][0]=0.904837 [0][1]=1.221403 [0][2]=0.740818
[1][0]=3.004166 [1][1]=0.301194 [1][2]=3.669297
[2][0]=0.122456 [2][1]=9.025013 [2][2]=0.100259

FIE:
fnFIE_mat_exp
FVCL::Data::CFvMatrix::log ( ) const

各成分の log の計算

現在の行列の各成分に対して log を計算した結果を返します。
現在の行列の内容は更新されません。

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void log()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 4.0; mat(0, 1) = 16.0; mat(0, 2) = 64.0;
mat(1, 0) = 2.0; mat(1, 1) = 3.0; mat(1, 2) = 4.0;
mat(2, 0) = 9.0; mat(2, 1) = 36.0; mat(2, 2) = 144.0;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.log();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.log\n"));
for( int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::log
CFvMatrix.log
[0][0]=1.386294 [0][1]=2.772589 [0][2]=4.158883
[1][0]=0.693147 [1][1]=1.098612 [1][2]=1.386294
[2][0]=2.197225 [2][1]=3.583519 [2][2]=4.969813

FIE:
fnFIE_mat_log
FVCL::Data::CFvMatrix::sqrt ( ) const

各成分の sqrt の計算

現在の行列の各成分に対して sqrt を計算した結果を返します。
現在の行列の内容は更新されません。

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void sqrt()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 4.0; mat(0, 1) = 16.0; mat(0, 2) = 64.0;
mat(1, 0) = 2.0; mat(1, 1) = 3.0; mat(1, 2) = 4.0;
mat(2, 0) = 9.0; mat(2, 1) = 36.0; mat(2, 2) = 144.0;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.sqrt();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.sqrt\n"));
for( int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::sqrt
CFvMatrix.sqrt
[0][0]=2.000000 [0][1]=4.000000 [0][2]=8.000000
[1][0]=1.414214 [1][1]=1.732051 [1][2]=2.000000
[2][0]=3.000000 [2][1]=6.000000 [2][2]=12.000000

FIE:
fnFIE_mat_sqrt
FVCL::Data::CFvMatrix::abs ( ) const

各成分の abs の計算

現在の行列の各成分に対して abs を計算した結果を返します。
現在の行列の内容は更新されません。

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void abs()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = -0.1; mat(0, 1) = 0.2; mat(0, 2) = -0.3;
mat(1, 0) = 1.1; mat(1, 1) = -1.2; mat(1, 2) = 1.3;
mat(2, 0) = -2.1; mat(2, 1) = 2.2; mat(2, 2) = -2.3;
// 3) 計算実行
FVCL::Data::CFvMatrix result = mat.abs();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.abs\n"));
for( int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column,result(row,column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::abs
CFvMatrix.abs
[0][0]=0.100000 [0][1]=0.200000 [0][2]=0.300000
[1][0]=1.100000 [1][1]=1.200000 [1][2]=1.300000
[2][0]=2.100000 [2][1]=2.200000 [2][2]=2.300000 

FIE:
fnFIE_mat_abs
FVCL::Data::CFvMatrix::ceil ( ) const

各成分の ceil の計算

現在の行列の各成分に対して ceil を計算した結果を返します。
現在の行列の内容は更新されません。

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void ceil()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = -0.1; mat(0, 1) = 0.2; mat(0, 2) = -0.3;
mat(1, 0) = 1.1; mat(1, 1) = -1.2; mat(1, 2) = 1.3;
mat(2, 0) = -2.1; mat(2, 1) = 2.2; mat(2, 2) = -2.3;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.ceil();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.ceil\n"));
for( int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::ceil
CFvMatrix.ceil
[0][0]=-0.000000 [0][1]=1.000000 [0][2]=-0.000000
[1][0]=2.000000 [1][1]=-1.000000 [1][2]=2.000000
[2][0]=-2.000000 [2][1]=3.000000 [2][2]=-2.000000

FIE:
fnFIE_mat_ceil
FVCL::Data::CFvMatrix::floor ( ) const

各成分の floor の計算

現在の行列の各成分に対して floor を計算した結果を返します。
現在の行列の内容は更新されません。

戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void floor()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = -0.1; mat(0, 1) = 0.2; mat(0, 2) = -0.3;
mat(1, 0) = 1.1; mat(1, 1) = -1.2; mat(1, 2) = 1.3;
mat(2, 0) = -2.1; mat(2, 1) = 2.2; mat(2, 2) = -2.3;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.floor();
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.floor\n"));
for( int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::floor
CFvMatrix.floor
[0][0]=-1.000000 [0][1]=0.000000 [0][2]=-1.000000
[1][0]=1.000000 [1][1]=-2.000000 [1][2]=1.000000
[2][0]=-3.000000 [2][1]=2.000000 [2][2]=-3.000000

FIE:
fnFIE_mat_floor
FVCL::Data::CFvMatrix::mul_elem ( const CFvMatrix src) const

成分ごとの乗算 (行列*行列)

現在の行列と指定された行列の各成分について乗算した結果を返します。
現在の行列の内容は更新されません。

※ 2つの行列の次元は等しくなければなりません。

引数
[in]src右辺値
戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void mul_elem()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvMatrix mat_src(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = -0.1; mat(0, 1) = 0.2; mat(0, 2) = -0.3;
mat(1, 0) = 1.1; mat(1, 1) = -1.2; mat(1, 2) = 1.3;
mat(2, 0) = -2.1; mat(2, 1) = 2.2; mat(2, 2) = -2.3;
mat_src(0, 0) = -0.1; mat_src(0, 1) = 0.2; mat_src(0, 2) = -0.3;
mat_src(1, 0) = 1.1; mat_src(1, 1) = -1.2; mat_src(1, 2) = 1.3;
mat_src(2, 0) = -2.1; mat_src(2, 1) = 2.2; mat_src(2, 2) = -2.3;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.mul_elem(mat_src);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.mul_elem\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::mul_elem
CFvMatrix.mul_elem
[0][0]=0.010000 [0][1]=0.040000 [0][2]=0.090000
[1][0]=1.210000 [1][1]=1.440000 [1][2]=1.690000
[2][0]=4.410000 [2][1]=4.840000 [2][2]=5.290000

FIE:
fnFIE_mat_mul_elem_aa
FVCL::Data::CFvMatrix::div_elem ( const CFvMatrix src) const

成分ごとの除算 (行列/行列)

現在の行列と指定された行列の各成分について除算した結果を返します。
現在の行列の内容は更新されません。

※ 2つの行列の次元は等しくなければなりません。

引数
[in]src右辺値
戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void div_elem()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvMatrix mat_src(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = -0.1; mat(0, 1) = 0.2; mat(0, 2) = -0.3;
mat(1, 0) = 1.1; mat(1, 1) = -1.2; mat(1, 2) = 1.3;
mat(2, 0) = -2.1; mat(2, 1) = 2.2; mat(2, 2) = -2.3;
mat_src(0, 0) = -0.5; mat_src(0, 1) = 0.2; mat_src(0, 2) = -0.5;
mat_src(1, 0) = 0.5; mat_src(1, 1) = -0.2; mat_src(1, 2) = 0.5;
mat_src(2, 0) = -0.5; mat_src(2, 1) = 0.2; mat_src(2, 2) = -0.5;
// 3) 計算実行.
FVCL::Data::CFvMatrix result = mat.div_elem(mat_src);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.div_elem\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::div_elem
CFvMatrix.div_elem
[0][0]=0.200000 [0][1]=1.000000 [0][2]=0.600000
[1][0]=2.200000 [1][1]=6.000000 [1][2]=2.600000
[2][0]=4.200000 [2][1]=11.000000 [2][2]=4.600000

FIE:
fnFIE_mat_div_elem_aa
FVCL::Data::CFvMatrix::modf ( CFvMatrix dsti,
CFvMatrix dstf 
) const

各成分の modf の計算

現在の行列の各成分に対して modf を計算し、 整数部を dsti に 小数部を dstf に格納して返します。

現在の行列と dsti と dstf の次元が等しくなければ内部で再確保します。 dsti と dstf はどちらか一方を省略することが可能です。 省略する場合は NULL を指定してください。 両方に NULL を指定した場合は例外を発行します。

引数
[out]dsti出力行列 (整数成分)
[out]dstf出力行列 (小数成分)
戻り値
算出された行列を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void modf()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = -0.1; mat(0, 1) = 0.2; mat(0, 2) = -0.3;
mat(1, 0) = 1.1; mat(1, 1) = -1.2; mat(1, 2) = 1.3;
mat(2, 0) = -2.1; mat(2, 1) = 2.2; mat(2, 2) = -2.3;
// 3) 計算実行.
mat.modf(&mat_dsti, &mat_dstf);
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.modf\n"));
for( int row = 0; row < mat_dsti.GetRows(); row++)
{
for (int column = 0; column < mat_dsti.GetColumns(); column++)
{
_tprintf(_T("dsti[%d][%d]=%f "), row, column, mat_dsti(row, column));
}
_tprintf(_T("\n"));
}
for( int row = 0; row < mat_dstf.GetRows(); row++)
{
for (int column = 0; column < mat_dstf.GetColumns(); column++)
{
_tprintf(_T("dstf[%d][%d]=%f "), row, column, mat_dstf(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::modf
CFvMatrix.modf
dsti[0][0]=-0.000000 dsti[0][1]=0.000000 dsti[0][2]=-0.000000
dsti[1][0]=1.000000 dsti[1][1]=-1.000000 dsti[1][2]=1.000000
dsti[2][0]=-2.000000 dsti[2][1]=2.000000 dsti[2][2]=-2.000000
dstf[0][0]=-0.100000 dstf[0][1]=0.200000 dstf[0][2]=-0.300000
dstf[1][0]=0.100000 dstf[1][1]=-0.200000 dstf[1][2]=0.300000
dstf[2][0]=-0.100000 dstf[2][1]=0.200000 dstf[2][2]=-0.300000

FIE:
fnFIE_mat_modf
FVCL::Data::CFvMatrix::has_nan ( ) const

NaN 値を含んでいるか否かの判定

戻り値
trueNaN を含んでいる。
falseNaN を一つも含んでいない。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
FIE:
fnFIE_mat_has_nan
FVCL::Data::CFvMatrix::is_nan ( ) const

全ての要素が NaN 値か否かの判定

戻り値
true全ての要素が NaN である。
falseNaN でない要素を含んでいる。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
FIE:
fnFIE_mat_is_nan
FVCL::Data::CFvMatrix::is_normal ( ) const

非数値判定

戻り値
true非数値を含んでいる。
false非数値を一つも含んでいない。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
FIE:
fnFIE_mat_is_normal
FVCL::Data::CFvMatrix::det ( ) const

[[OSS]] 行列式の計算

現在の行列(NxN 行列 a)の行列式 (det(a)) を計算します。
現在の行列は正方行列で無ければいけません。

戻り値
求められた行列式を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_det
FVCL::Data::CFvMatrix::norm ( INT  type) const

[[OSS]] 行列のノルムの計算

現在の行列のノルムを計算します。

引数
[in]type求めるノルムの種類
  • 1 : 1-norm
  • 2 : 2-norm (特異値の最大値)
  • I32_MAX : infinity norm
  • -1 : Frobenius norm

戻り値
求められたノルムを返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_norm
FVCL::Data::CFvMatrix::rank ( DOUBLE  tol) const

[[OSS]] 行列のランクの計算

現在の行列のランクを計算します。

引数
[in]tol0 と見なす閾値
0 未満の値が指定されたときは内部計算した値を使用します。
戻り値
求められたランクを返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_rank
FVCL::Data::CFvMatrix::cond ( INT  type) const

[[OSS]] 行列の条件数計算

現在の行列の条件数を計算します。
type != 2 のとき、現在の行列は正方行列でなければいけません。

引数
[in]type求める条件数の種類
  • 1 : 1-norm 条件数
  • 2 : 2-norm 条件数
  • I32_MAX : infinity norm 条件数
  • -1 : Frobenius norm 条件数

戻り値
求められた条件数を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_cond
FVCL::Data::CFvMatrix::rcond ( ) const

[[OSS]] 行列の条件数の逆数計算

LAPACK の条件判定ルーチンを使用して現在の行列(正方行列)の1ノルム条件数の逆数を計算します。
行列の条件が良い場合 rcond は 1.0 に近くなり、条件が悪い場合には rcond は 0.0 に近くなります。

戻り値
求められた条件数の逆数を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_rcond
FVCL::Data::CFvMatrix::chol ( CFvMatrix a,
INT  mode 
) const

[[OSS]] 行列のコレスキー分解

現在の行列(対称正定値行列)のコレスキー分解を行います。

引数
[out]a分解後の行列
※必要に応じて内部で再確保されます。
[in]modeモード
  • 0: 上三角部。現在の行列の上三角部を参照し、行列 a の上三角部に格納する。下三角部は 0 になる。
  • 1: 下三角部。現在の行列の下三角部に参照し、行列 a の下三角部に格納する。上三角部は 0 になる。

例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_chol
FVCL::Data::CFvMatrix::lu ( CFvMatrix a,
CFvBuffer< INT > *  pivot 
) const

[[OSS]] 行列の LU 分解

現在の行列(MxN 行列)を行交換による部分軸選択を用いて LU 分解します。

引数
[out]a分解後の行列
※必要に応じて内部で再確保されます。
[out]pivot軸選択用添字配列。(要素数 min(M,N))
※必要に応じて内部で再確保されます。
※0≦i<min(M,N) に対して、行i は 行pivot[i] と交換されています。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_lu
FVCL::Data::CFvMatrix::qr ( CFvMatrix q,
CFvMatrix r 
) const

[[OSS]] 行列の QR 分解

現在の行列(MxN 行列)の QR 分解を行います。
行列のサイズ(M,N)が同じ場合は、q または r に自信のインスタンスを指定することができます。

引数
[out]qMxM の直交行列 Q
※必要に応じて内部で再確保されます。
[out]rNxN の三角行列 R
※必要に応じて内部で再確保されます。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_qr
FVCL::Data::CFvMatrix::svd ( CFvMatrix u,
CFvMatrix vt,
CFvBuffer< DOUBLE > *  sigma 
) const

[[OSS]] 行列の特異値分解

現在の行列(MxN 行列)の特異値分解を行います。
u または vt に自信のインスタンスを指定することができます。

※注) 出力の行列を省略する場合は u, vt の両方に NULL を指定してください。

引数
[out]uMxN の直行行列。
※必要に応じて内部で再確保されます。
※不要な場合は NULL を指定してください。
[out]vtMxN の直行行列。
※必要に応じて内部で再確保されます。
※不要な場合は NULL を指定してください。
[out]sigma昇順にソートされた特異値配列。(要素数 min(M,N))
※必要に応じて内部で再確保されます。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_svd
FVCL::Data::CFvMatrix::svd2 ( CFvMatrix u,
CFvMatrix vt,
CFvBuffer< DOUBLE > *  sigma,
INT  mode,
DOUBLE  rcond,
INT rank 
) const

[[OSS]] 行列の特異値分解 (convenience function)

現在の行列(MxN 行列)の特異値分解を行います。

引数
[out]uMxN の直行行列。
※必要に応じて内部で再確保されます。
※不要な場合は NULL を指定してください。
[out]vtMxN の直行行列。
※必要に応じて内部で再確保されます。
※不要な場合は NULL を指定してください。
[out]sigma昇順にソートされた特異値配列。
※必要に応じて内部で再確保されます。
※不要な場合は NULL を指定してください。
[in]mode演算モード
  • 0: full SVD ( u は MxM 行列, vt は NxN 行列, sigma の次元は L ) sigma[K] から sigma[L-1] は常に 0 になります。
  • 1: full SVD または economy SVD
    • M≦N の時、full SVD
    • M>N の時、economy SVD

  • 2: economy SVD ( u は MxK 行列, vt は KxN 行列, sigma の次元は K )

[in]rcondランク計算時の閾値設定。
ランク計算時に 特異値 sigma[i] ≦ rcond*sigma[0] の値をゼロと見なします。
rcond<0.0 の値が指定されたときは、max(sigma) * eps の値を使用します。
rank に NULL が指定された場合は本パラメータは使用されません。
[in]rankランクの値。
※不要な場合は NULL を指定してください。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_svd2
FVCL::Data::CFvMatrix::eig ( CFvBuffer< FCOMPLEX > *  lambda,
CFvBuffer< FCOMPLEX > *  vr,
CFvBuffer< FCOMPLEX > *  vl 
) const

[[OSS]] 行列の固有値・固有ベクトル計算

現在の行列(NxN 正方行列)の固有値を計算します。
また、選択された場合、左及び右固有ベクトルも計算します。

引数
[out]lambda固有値配列。(要素数 N)
※必要に応じて内部で再確保されます。
[out]vr右固有ベクトル。(要素数 N*N)
※必要に応じて内部で再確保されます。
※不要な場合は NULL を指定してください。
[out]vl左固有ベクトル。(要素数 N*N)
※必要に応じて内部で再確保されます。
※不要な場合は NULL を指定してください。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_eig
FVCL::Data::CFvMatrix::inverse3 ( CFvMatrix ai,
DOUBLE det 
) const

[[OSS]] 行列の逆行列計算(LAPACK使用)

現在の行列(NxN 正方行列)の逆行列を計算します。
ai に自信のインスタンスを指定することができます。

引数
[out]ai逆行列 (NxN)
※必要に応じて内部で再確保されます。
[out]det行列式
※不要な場合は NULL を指定してください。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_inverse3
FVCL::Data::CFvMatrix::pseudo_inverse ( CFvMatrix ai,
DOUBLE  threshold,
INT rank 
) const

[[OSS]] 行列の擬似逆行列計算(LAPACK使用)

現在の行列(MxN行列)の擬似逆行列を計算します。

引数
[out]ai逆行列 (NxN)
※必要に応じて内部で再確保されます。
[in]threshold擬似行列計算する際の特異値の閾値
[out]rankランク
※不要な場合は NULL を指定してください。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_pseudo_inverse
FVCL::Data::CFvMatrix::linsolve ( INT  method,
DOUBLE  rcond,
const CFvVector b,
CFvVector x,
DOUBLE residual,
INT rank 
) const

[[OSS]] 連立一次方程式の計算

過剰、または過小定義の連立一次方程式 Ax = b を解きます。
※ A は、現在の行列(MxN 係数行列)を示します。

引数
[in]method解法
  • 0: QR または LQ 分解を使用した手法による計算。
  • 1: SVD を使用した手法による計算。

[in]rcondゼロ判定閾値
※method が 1 の時のみ使用します。
[in]b右辺ベクトル (M 次元)
[out]x解ベクトル (N 次元)
※必要に応じて内部で再確保されます。
[out]residual誤差二乗和
※行列 A のサイズが 行≦列 の場合、本パラメータは使用されません。
※不要な場合は NULL を指定してください。
[out]rankランク
※不要な場合は NULL を指定してください。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_linsolve
FVCL::Data::CFvMatrix::linsolve2 ( INT  method,
DOUBLE  rcond,
const CFvMatrix b,
CFvMatrix x,
CFvBuffer< DOUBLE > *  residuals,
INT rank 
) const

[[OSS]] 連立一次方程式の計算

過剰、または過小定義の連立一次方程式 Ax = b を解きます。
※ A は、現在の行列(MxN 係数行列)を示します。

引数
[in]method解法
  • 0: QR または LQ 分解を使用した手法による計算。
  • 1: SVD を使用した手法による計算。

[in]rcondゼロ判定閾値
※method が 1 の時のみ使用します。
[in]bMxN RHS 右辺行列
[out]xNxN RHS 解行列
※必要に応じて内部で再確保されます。
[out]residuals誤差二乗和 (要素数 N)
※必要に応じて内部で再確保されます。
※不要な場合は NULL を指定してください。
[out]rankランク
※不要な場合は NULL を指定してください。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode メソッドからエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER パラメータが不正です。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
FIE:
fnFIE_mat_linsolve2

フレンドと関連関数の詳解

FVCL::Data::CFvMatrix::operator* ( const CFvMatrix matrix,
const CFvVector vector 
)
friend

乗算オペレータ(行列*ベクトル)

左辺値(行列)と右辺値(ベクトル)を乗算した結果を返します。
左辺値(行列)の列数と右辺値(ベクトル)の次元が一致している必要があります。

引数
[in]matrix左辺値
[in]vector右辺値
戻り値
算出されたベクトルを返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Multiply_mv()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 4;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvVector vector(columns );
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0; mat(0, 3)= 2.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0; mat(1, 3) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0; mat(2, 3) = 8.0;
vector[0] = 3.0; vector[1] = 6.0; vector[2] = 8.0; vector[3] = 2.0;
// 3) 計算実行.
FVCL::Data::CFvVector result = mat * vector;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Multiply(matrix * vector)\n"));
for (int dim = 0; dim < result.GetDim(); dim++)
{
_tprintf(_T("[%d]=%f "), dim, result[dim]);
}
_tprintf(_T("\n"));
}
【関数の出力】
User::SampleCode::Data::Matrix::Multiply_mv
CFvMatrix.Multiply(matrix * vector)
[0]=49.000000 [1]=10.000000 [2]=44.000000

FIE:
fnFIE_mat_mul_av
参照
operator * ( const CFvMatrix& matrix, const CFvVector& vector )
FVCL::Data::CFvMatrix::operator* ( const CFvVector vector,
const CFvMatrix matrix 
)
friend

乗算オペレータ(ベクトル*行列)

左辺値(ベクトル)と右辺値(行列)を乗算した結果を返します。
左辺値(ベクトル)の次元と右辺値(行列)の行数が一致している必要があります。

引数
[in]vector左辺値
[in]matrix右辺値
戻り値
算出されたベクトルを返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Multiply_vm()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 4;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
FVCL::Data::CFvVector vector(rows);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0; mat(0, 3)= 2.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0; mat(1, 3) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0; mat(2, 3) = 1.0;
vector[0] = 3.0; vector[1] = 6.0; vector[2] = 8.0;
// 3) 計算実行.
FVCL::Data::CFvVector result = vector * mat;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Multiply(vector * matrix)\n"));
for (int dim = 0; dim < result.GetDim(); dim++)
{
_tprintf(_T("[%d]=%f "), dim, result[dim]);
}
_tprintf(_T("\n"));
}
【関数の出力】
User::SampleCode::Data::Matrix::Multiply_vm
CFvMatrix.Multiply(vector * matrix)
[0]=43.000000 [1]=37.000000 [2]=7.000000 [3]=20.000000

FIE:
fnFIE_mat_mul_va
参照
operator * ( const CFvVector& vector, const CFvMatrix& matrix )
FVCL::Data::CFvMatrix::operator/ ( const CFvMatrix matrix,
DOUBLE  scalar 
)
friend

除算オペレータ(行列/スカラー)

左辺値(行列)の各要素を右辺値(スカラー)で除算した結果を返します。

引数
[in]matrix左辺値(行列)
[in]scalar右辺値(スカラー)
戻り値
計算結果を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Division_ms()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
// 3) 計算実行.
double scalar = 8.0;
FVCL::Data::CFvMatrix result = mat / scalar;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Division(matrix/scalar)\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::Division_ms
CFvMatrix.Division(matrix/scalar)
[0][0]=0.125000 [0][1]=0.375000 [0][2]=0.375000
[1][0]=0.500000 [1][1]=-0.250000 [1][2]=0.125000
[2][0]=0.250000 [2][1]=0.625000 [2][2]=-0.125000

FIE:
fnFIE_mat_div_elem_as
参照
operator / ( const CFvMatrix& matrix, DOUBLE scalar )
FVCL::Data::CFvMatrix::operator/ ( DOUBLE  scalar,
const CFvMatrix matrix 
)
friend

除算オペレータ(スカラー/行列)

左辺値(スカラー)を右辺値(行列)の各要素で除算した結果を返します。

引数
[in]scalar左辺値(スカラー)
[in]matrix右辺値(行列)
戻り値
計算結果を返します。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスがありません。
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE メモリの確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
12 FVCL_ErrorCode::INVALID_OBJECT メモリが確保されていません。
29 FVCL_ErrorCode::NOT_CALCULABLE 計算できません。
サンプルコード:
void Division_sm()
{
_tprintf(_T("%s\n"), __TFUNCTION__);
int rows = 3;
int columns = 3;
// 1) インスタンスの準備.
FVCL::Data::CFvMatrix mat(rows, columns, NULL);
// 2) 行列の要素の設定.
mat(0, 0) = 1.0; mat(0, 1) = 3.0; mat(0, 2) = 3.0;
mat(1, 0) = 4.0; mat(1, 1) = -2.0; mat(1, 2) = 1.0;
mat(2, 0) = 2.0; mat(2, 1) = 5.0; mat(2, 2) = -1.0;
// 3) 計算実行.
double scalar = 8.0;
FVCL::Data::CFvMatrix result = scalar / mat;
// 確認) 処理結果の出力.
_tprintf(_T("CFvMatrix.Division(scalar/matrix)\n"));
for (int row = 0; row < result.GetRows(); row++)
{
for (int column = 0; column < result.GetColumns(); column++)
{
_tprintf(_T("[%d][%d]=%f "), row, column, result(row, column));
}
_tprintf(_T("\n"));
}
}
【関数の出力】
User::SampleCode::Data::Matrix::Division_sm
CFvMatrix.Division(scalar/matrix)
[0][0]=8.000000 [0][1]=2.666667 [0][2]=2.666667
[1][0]=2.000000 [1][1]=-4.000000 [1][2]=8.000000
[2][0]=4.000000 [2][1]=1.600000 [2][2]=-8.000000

FIE:
fnFIE_mat_mul_elem_sa
参照
operator / ( DOUBLE scalar, const CFvMatrix& matrix )

Documentation copyright © 2007 FAST Corporation. [B-001864]
Generated on 2023年11月02日(木) 10時13分00秒 for WIL説明書(C++) by doxygen 1.8.11