基本操作
[行列演算]


データ構造

struct  FMATRIX
 行列 [詳細]
struct  FVECTOR
 ベクトル [詳細]

関数

FMATRIX *FVALGAPI fnFIE_mat_aalloc (INT row, INT col)
 行列の生成
INT FVALGAPI fnFIE_mat_arealloc (FMATRIX *a, INT row, INT col)
 行列次元の変更
VOID FVALGAPI fnFIE_mat_afree (FMATRIX *a)
 行列の解放
FVECTOR *FVALGAPI fnFIE_mat_valloc (INT dim)
 ベクトルの生成
INT FVALGAPI fnFIE_mat_vrealloc (FVECTOR *vect, INT dim)
 ベクトルの次元変更
VOID FVALGAPI fnFIE_mat_vfree (FVECTOR *vect)
 ベクトル領域の解放
INT FVALGAPI fnFIE_mat_vinit (FVECTOR *vect)
 vectorの初期化
INT FVALGAPI fnFIE_mat_vinit_val (FVECTOR *vect, DOUBLE val)
 vectorの初期化(初期化値付き)
INT FVALGAPI fnFIE_mat_ainit (FMATRIX *a)
 行列の初期化
INT FVALGAPI fnFIE_mat_ainit_val (FMATRIX *a, DOUBLE val)
 行列の初期化(初期化値付き)
INT FVALGAPI fnFIE_mat_copy (const FMATRIX *a1, FMATRIX *a2)
 行列の複写
INT FVALGAPI fnFIE_mat_copy_to_img (const FMATRIX *a, FHANDLE hdst)
 行列から画像への複写
INT FVALGAPI fnFIE_mat_copy_from_img (const FHANDLE hsrc, FMATRIX *a)
 画像から行列への複写
INT FVALGAPI fnFIE_mat_vcopy (const FVECTOR *v1, FVECTOR *v2)
 ベクトルの複写
INT FVALGAPI fnFIE_mat_eye (FMATRIX *a)
 単位行列の作成
INT FVALGAPI fnFIE_mat_ones (FMATRIX *a)
 要素が全て1の行列の作成
INT FVALGAPI fnFIE_mat_zeros (FMATRIX *a)
 要素が全て0の行列の作成
INT FVALGAPI fnFIE_mat_aduplicate (const FMATRIX *src, FMATRIX **dst)
 行列の複製
INT FVALGAPI fnFIE_mat_aread (FMATRIX **mat, fvstream *stream, INT *size)
 ストリームからの行列読込
INT FVALGAPI fnFIE_mat_awrite (const FMATRIX *mat, fvstream *stream, INT *size)
 行列のストリームへの書込
INT FVALGAPI fnFIE_mat_vread (FVECTOR **vec, fvstream *stream, INT *size)
 ストリームからのベクトル読込
INT FVALGAPI fnFIE_mat_vwrite (const FVECTOR *vec, fvstream *stream, INT *size)
 ベクトルのストリームへの書込
INT FVALGAPI fnFIE_mat_triu (const FMATRIX *a, FMATRIX *ad, INT k)
 上三角成分の抽出
INT FVALGAPI fnFIE_mat_tril (const FMATRIX *a, FMATRIX *ad, INT k)
 下三角成分の抽出
INT FVALGAPI fnFIE_mat_circshift (const FMATRIX *a, FMATRIX *ad, INT sx, INT sy)
 行列要素の循環シフト
INT FVALGAPI fnFIE_mat_horzcat (const FMATRIX *a1, const FMATRIX *a2, FMATRIX *ad)
 行列要素の水平方向結合
INT FVALGAPI fnFIE_mat_vertcat (const FMATRIX *a1, const FMATRIX *a2, FMATRIX *ad)
 行列要素の垂直方向結合
INT FVALGAPI fnFIE_mat_flipdim (const FMATRIX *a, FMATRIX *ad, INT mode)
 行列要素の反転
INT FVALGAPI fnFIE_mat_rand (FMATRIX *a)
  [[OSS]] ランダム行列の作成

関数

FMATRIX* FVALGAPI fnFIE_mat_aalloc ( INT  row,
INT  col 
)

行列の生成

指定次元の行列に必要なメモリ確保を行い、生成した行列を返します。 確保する行列のサイズは row * col < $2^{28} $ を満たすように指定 しなければいけません。

引数:
[in] row 確保する行列の行数
[in] col 確保する行列の列数
戻り値:
確保した行列。 メモリ不足で確保に失敗した場合は、NULLを返します。
参照:
fnFIE_mat_afree(), fnFIE_mat_arealloc()
example code
// エラー処理は省略しているので注意して下さい。
#include "fie.h"

INT main()
{
    FMATRIX *a=NULL;

    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    // 3x3行列a を確保
    a = fnFIE_mat_aalloc( 3, 3 );

    // a を10x10行列にリサイズ
    fnFIE_mat_arealloc( a, 10, 10 );

    fnFIE_mat_afree( a );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

INT FVALGAPI fnFIE_mat_arealloc ( FMATRIX a,
INT  row,
INT  col 
)

行列次元の変更

すでに確保済みの行列の次元を変更します。 変更に成功した場合、元の値は保存されません。 変更後の行列のサイズは row * col < $2^{28} $ を 満たすように指定しなければいけません。 本関数に渡される行列 afnFIE_mat_aalloc() によって 確保されたものでなければなりません。

メモリ確保に失敗した場合は F_ERR_NOMEMORY を返しますが、 変更前の元の行列は保持されたままになります。 この場合は fnFIE_mat_afree() にて解放する必要があります。

引数:
[in,out] a 次元を変更する行列
[in] row 変更後の行列の行数
[in] col 変更後の行列の列数
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正(a==NULL,row,colが不正)
F_ERR_NOMEMORY メモリ不足エラー
参照:
fnFIE_mat_aalloc(), fnFIE_mat_afree()
example code
// エラー処理は省略しているので注意して下さい。
#include "fie.h"

INT main()
{
    FMATRIX *a=NULL;

    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    // 3x3行列a を確保
    a = fnFIE_mat_aalloc( 3, 3 );

    // a を10x10行列にリサイズ
    fnFIE_mat_arealloc( a, 10, 10 );

    fnFIE_mat_afree( a );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

VOID FVALGAPI fnFIE_mat_afree ( FMATRIX a  ) 

行列の解放

行列を解放します。 本関数に渡される行列 afnFIE_mat_aalloc() によって 確保されたものでなければなりません。

引数:
[in] a 解放する配列
参照:
fnFIE_mat_aalloc(), fnFIE_mat_arealloc()
example code
// エラー処理は省略しているので注意して下さい。
#include "fie.h"

INT main()
{
    FMATRIX *a=NULL;

    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    // 3x3行列a を確保
    a = fnFIE_mat_aalloc( 3, 3 );

    // a を10x10行列にリサイズ
    fnFIE_mat_arealloc( a, 10, 10 );

    fnFIE_mat_afree( a );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

FVECTOR* FVALGAPI fnFIE_mat_valloc ( INT  dim  ) 

ベクトルの生成

ベクトルに必要なメモリを確保し、生成したベクトルを返します。

引数:
[in] dim ベクトルの次元(要素数) (0 < dim < 2^29)
戻り値:
確保したベクトル メモリ不足により異常終了した場合は、NULLを返します。
参照:
fnFIE_mat_vfree(), fnFIE_mat_vrealloc()
example code
// エラー処理は省略しているので注意して下さい。
#include "fie.h"

INT main()
{
    FVECTOR *v=NULL;

    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    // 次元3のベクトル v を確保
    v = fnFIE_mat_valloc( 3 );

    // v を次元10にリサイズ
    fnFIE_mat_vrealloc( v, 10 );

    fnFIE_mat_vfree( v );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

INT FVALGAPI fnFIE_mat_vrealloc ( FVECTOR vect,
INT  dim 
)

ベクトルの次元変更

既に確保済みのベクトルの次元を変更します。 変更に成功した場合、元の値は保存されません。 メモリ確保に失敗した場合は F_ERR_NOMEMORY を返しますが、 元の行列は保持されています。 この場合は fnFIE_mat_vfree() にて解放する必要があります。

引数:
[in,out] vect 次元変更をするベクトル
[in] dim 変更後のベクトルの次元(要素数) (0 < dim < 2^29)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正(vect==NULL, dimが不正)
F_ERR_NOMEMORY メモリ不足エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_mat_vfree(), fnFIE_mat_vrealloc()
example code
// エラー処理は省略しているので注意して下さい。
#include "fie.h"

INT main()
{
    FVECTOR *v=NULL;

    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    // 次元3のベクトル v を確保
    v = fnFIE_mat_valloc( 3 );

    // v を次元10にリサイズ
    fnFIE_mat_vrealloc( v, 10 );

    fnFIE_mat_vfree( v );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

VOID FVALGAPI fnFIE_mat_vfree ( FVECTOR vect  ) 

ベクトル領域の解放

確保済みのベクトルを解放します。

引数:
[in] vect 解放するベクトル
参照:
fnFIE_mat_valloc(), fnFIE_mat_vrealloc()
example code
// エラー処理は省略しているので注意して下さい。
#include "fie.h"

INT main()
{
    FVECTOR *v=NULL;

    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    // 次元3のベクトル v を確保
    v = fnFIE_mat_valloc( 3 );

    // v を次元10にリサイズ
    fnFIE_mat_vrealloc( v, 10 );

    fnFIE_mat_vfree( v );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

INT FVALGAPI fnFIE_mat_vinit ( FVECTOR vect  ) 

vectorの初期化

ベクトルの要素を全て0.0に初期化します。

引数:
[in,out] vect 初期化するベクトル
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_mat_vinit_val ( FVECTOR vect,
DOUBLE  val 
)

vectorの初期化(初期化値付き)

ベクトルの要素を全て val に初期化します。

引数:
[in,out] vect 初期化するベクトル
[in] val 初期化値
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_mat_ainit ( FMATRIX a  ) 

行列の初期化

行列の要素を全て0.0に初期化します。 本関数と fnFIE_mat_zeros は同じ動作をします。

引数:
[in,out] a 初期化したい行列
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_mat_zeros()

INT FVALGAPI fnFIE_mat_ainit_val ( FMATRIX a,
DOUBLE  val 
)

行列の初期化(初期化値付き)

行列の要素を全て指定値 val に初期化します。

引数:
[in,out] a 初期化したい行列
[in] val 初期化値
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_mat_init()

INT FVALGAPI fnFIE_mat_copy ( const FMATRIX a1,
FMATRIX a2 
)

行列の複写

行列1(a1)から、行列2(a2)に内容を複写します。 a2 の次元が a1 と違っていた場合は、エラーになります。

引数:
[in] a1 行列1(コピー元行列)
[out] a2 行列2(コピー先行列)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_mat_copy_to_img ( const FMATRIX a,
FHANDLE  hdst 
)

行列から画像への複写

行列 a から、画像 hdst に内容を複写します。 コピー元行列とコピー先画像は以下の条件を満たしている必要があります。

  • a の行数が hdst の高さと等しい。
  • a の列数が hdst の幅と等しい。
  • hdst のチャネル数は1。

対応する hdst の画像型は F_IMG_UC8、F_IMG_US16、F_IMG_S16、F_IMG_FLOAT、F_IMG_DOUBLE です。
コピー先画像の型が F_IMG_DOUBLE の場合、元の行列の値がそのままコピーされます。
そうでない場合は、行列 a が画像型 F_IMG_DOUBLE の画像であるとみなした際の fnFIE_img_copy() の動作に準じます。

引数:
[in] a コピー元行列
[out] hdst コピー先画像 (type: uc8, s16, us16, float, double / ch: 1)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_INVALID_IMAGE 不正な画像エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_mat_copy_from_img ( const FHANDLE  hsrc,
FMATRIX a 
)

画像から行列への複写

画像 hsrc から、行列 a に内容を複写します。 コピー元画像とコピー先行列は以下の条件を満たしている必要があります。

  • a の行数が hsrc の高さと等しい。
  • a の列数が hsrc の幅と等しい。
  • hsrc のチャネル数は1。

対応する hsrc の画像型は F_IMG_UC8、F_IMG_US16、F_IMG_S16、F_IMG_FLOAT、F_IMG_DOUBLE です。
コピー元画像の型が F_IMG_DOUBLE の場合、元の画像の濃淡値がそのままコピーされます。
そうでない場合は、行列 a が画像型 F_IMG_DOUBLE の画像であるとみなした際の fnFIE_img_copy() の動作に準じます。

引数:
[in] hsrc コピー元画像 (type: uc8, s16, us16, float, double / ch: 1)
[out] a コピー先行列
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_INVALID_IMAGE 不正な画像エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_mat_vcopy ( const FVECTOR v1,
FVECTOR v2 
)

ベクトルの複写

ベクトル1(v1)から、ベクトル2(v2)に内容を複写します。 v2 の次元が v1 と違っていた場合は、エラーになります。

引数:
[in] v1 ベクトル1(コピー元ベクトル)
[out] v2 ベクトル2(コピー先ベクトル)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_mat_eye ( FMATRIX a  ) 

単位行列の作成

入力された正方行列の値を単位行列に設定します。 対角成分が 1.0 になり、他の成分は 0.0 になります。

引数:
[in,out] a 値を設定する行列
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正終了
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_mat_ones ( FMATRIX a  ) 

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

入力された行列の成分を全て 1.0 に設定します。

引数:
[in,out] a 値を設定する行列
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正終了
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_mat_zeros ( FMATRIX a  ) 

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

入力された行列の成分を全て 0.0 に設定します。 本関数は fnFIE_mat_ainit() のエイリアスであり、 同じ動作をします。

引数:
[in,out] a 値を設定する行列
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正終了
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_mat_ainit()

INT FVALGAPI fnFIE_mat_aduplicate ( const FMATRIX src,
FMATRIX **  dst 
)

行列の複製

行列 src と同じ内容の行列 *dst を生成します。

本関数は、内部で fnFIE_mat_aalloc() にて src と同じサイズの行列を生成し、 fnFIE_mat_copy() にて内容をコピーします。 正常終了すると *dst には複製された行列が格納されます。 *dst が不要になったら fnFIE_mat_afree() にて解放してください。

引数:
[in] src コピー元行列
[out] dst コピーされた行列 関数エントリー時 *dst == NULL でなければなりません。
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
F_ERR_NOMEMORY メモリ不足エラー

INT FVALGAPI fnFIE_mat_aread ( FMATRIX **  mat,
fvstream stream,
INT *  size 
)

ストリームからの行列読込

指定されたストリーム fvstream stream から行列を読み込みます。 入力されるストリームは fnFIE_mat_awrite() にて出力されたものでなければなりません。 ストリームの仕様は fnFIE_mat_awrite() のドキュメントを参照してください。

正常に読込が行われた場合 *mat には読み込んだ行列のポインタが格納されます。 ただし、ストリームに NULL FMATRIX が格納されていた場合は *mat には NULL が 格納されます。

引数:
[out] mat 読み込んだ行列のポインタのポインタ。
[in] stream 読み込むストリーム
[out] size ストリームから読み込まれたサイズ(バイト単位)。
不要な場合はNULLを指定可能です。
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータエラー
F_ERR_FILE_IO ストリームエラー
F_ERR_NOMEMORY メモリ不足エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_mat_awrite ( const FMATRIX mat,
fvstream stream,
INT *  size 
)

行列のストリームへの書込

指定されたストリーム fvstream stream へ行列を書き込みます。 出力したストリームは fnFIE_mat_aread() にて読み込むことができます。

stream にNULLをした場合、本関数は指定された mat の書込に必用な サイズを計算し(バイト単位) *size に代入して終了します。

ストリーム仕様
mat == NULL の場合
	offset     type       mean
	---------------------------------------------------------------
	+0         UCHAR*4    chunk header. (=='FDAT')
	+4         UCHAR*4    type id (=='0002')
	+8         INT        size
	+12        INT        format version (1)
	+16        INT        1 (is null object?)
mat != NULL の場合
	offset     type       mean
	---------------------------------------------------------------
	+0         UCHAR*4    chunk header. (=='FDAT')
	+4         UCHAR*4    type id (=='0002')
	+8         INT        size
	+12        INT        format version (1)
	+16        INT        0 (is null object?)
	+20        INT        row
	+24        INT        col
	+28+8*X    DOUBLE*X   elements
引数:
[in] mat 書き込む行列のポインタ
[out] stream 書き込むストリーム
[out] size ストリームへ書き込まれたサイズ(バイト単位)。
不要な場合はNULLを指定可能です。
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータエラー
F_ERR_FILE_IO ストリームエラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_mat_vread ( FVECTOR **  vec,
fvstream stream,
INT *  size 
)

ストリームからのベクトル読込

指定されたストリーム fvstream stream からベクトルを読み込みます。 入力されるストリームは fnFIE_mat_vwrite() にて出力されたものでなければなりません。

正常に読込が行われた場合 *vec には読み込んだベクトルのポインタが格納されます。 ただし、ストリームに NULL FVECTOR が格納されていた場合は *vec には NULL が 格納されます。

引数:
[out] vec 読み込んだベクトルのポインタのポインタ。
関数エントリー時 *vec はNULLで無ければなりません。
[in] stream 読み込むストリーム
[out] size ストリームから読み込まれたサイズ(バイト単位)。
不要な場合はNULLを指定可能です。
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータエラー
F_ERR_FILE_IO ストリームエラー
F_ERR_NOMEMORY メモリ不足エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_mat_vwrite ( const FVECTOR vec,
fvstream stream,
INT *  size 
)

ベクトルのストリームへの書込

指定されたストリーム fvstream stream へベクトルを書き込みます。 出力したストリームは fnFIE_mat_vread() にて読み込むことができます。

stream にNULLをした場合、本関数は指定された vec の書込に 必用なサイズを計算し *size に代入して終了します。

ストリーム仕様
vec == NULL の場合
	offset     type       mean
	---------------------------------------------------------------
	+0         UCHAR*4    chunk header. (=='FDAT')
	+4         UCHAR*4    type id (=='0001', ascii radix=16)
	+8         INT        size
	+12        INT        format version (1)
	+16        INT        1 (is null object?)
vec != NULL の場合
	offset     type       mean
	---------------------------------------------------------------
	+0         UCHAR*4    chunk header. (=='FDAT')
	+4         UCHAR*4    type id (=='0001', ascii radix=16)
	+8         INT        size
	+12        INT        format version (1)
	+16        INT        0 (is null object?)
	+20        INT        dimension
	+24+8*X    DOUBLE*X   elements
引数:
[in] vec 書き込むベクトルのポインタ
[out] stream 書き込むストリーム
[out] size ストリームへ書き込まれたサイズ(バイト単位)。
不要な場合はNULLを指定可能です。
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータエラー
F_ERR_FILE_IO ストリームエラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_mat_triu ( const FMATRIX a,
FMATRIX ad,
INT  k 
)

上三角成分の抽出

MxN行列 A の上三角部を取り出し ad に出力します。
ad の対角成分を除く下三角部は 0 が格納されます。

k は対角位置を指定するパラメータで、k=0は主対角を示します。 k>0のとき主対角よりも上側の対角を、k<0のとき主対角成分より下側の対角を示します。 $ min(M,N) \le |k| $ と指定した場合、エラーとなります。

aad は同じポインタを渡すことが出来ます。

fmatrix_diag.png

引数:
[in] a MxN入力行列A
[out] ad MxN行列。aの上三角要素が格納される。
[in] k 対角位置
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
example code
// エラー処理は省略しているので注意して下さい。
#include <stdio.h>
#include "fie.h"

static VOID mat_print( FMATRIX *a )
{
    INT i,j;
    for( j=0; j<a->row; j++ ){
        printf( "  [  " );
        for( i=0; i<a->col; i++ ){
            printf( "%+0.6e  ", a->m[j][i] );
        }
        printf( "]\n" );
    }
    printf( "\n" );
}

INT main()
{
    FMATRIX *a=NULL, *b=NULL, *c=NULL;

    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    a = fnFIE_mat_aalloc( 4, 4 ); // 4x4行列 a を確保
    b = fnFIE_mat_aalloc( 4, 4 ); // 4x4行列 b を確保

    // 入力値をセット
    a->m[0][0] = 1.0;  a->m[0][1] = 3.0;  a->m[0][2] = 3.0;  a->m[0][3] = 9.0;
    a->m[1][0] = 4.0;  a->m[1][1] =-2.0;  a->m[1][2] = 1.0;  a->m[1][3] = 3.0;
    a->m[2][0] = 6.0;  a->m[2][1] =-4.0;  a->m[2][2] = 8.0;  a->m[2][3] = 5.0;
    a->m[3][0] =-2.0;  a->m[3][1] = 3.0;  a->m[3][2] =-7.0;  a->m[3][3] = 3.0;

    printf( "a =\n" );  mat_print( a );
    
    // 上三角行列を取得
    fnFIE_mat_triu( a, b, 0 );
    printf( "triu(a,0) =\n" );
    mat_print( b );

    fnFIE_mat_triu( a, b, 1 );
    printf( "triu(a,1) =\n" );
    mat_print( b );

    // 下三角行列を取得
    fnFIE_mat_tril( a, b, 0 );
    printf( "tril(a,0) =\n" );
    mat_print( b );

    fnFIE_mat_tril( a, b, 1 );
    printf( "tril(a,1) =\n" );
    mat_print( b );
    
    fnFIE_mat_afree( a );
    fnFIE_mat_afree( b );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

/*
結果

a =
  [  +1.000000e+000  +3.000000e+000  +3.000000e+000  +9.000000e+000  ]
  [  +4.000000e+000  -2.000000e+000  +1.000000e+000  +3.000000e+000  ]
  [  +6.000000e+000  -4.000000e+000  +8.000000e+000  +5.000000e+000  ]
  [  -2.000000e+000  +3.000000e+000  -7.000000e+000  +3.000000e+000  ]

triu(a,0) =
  [  +1.000000e+000  +3.000000e+000  +3.000000e+000  +9.000000e+000  ]
  [  +0.000000e+000  -2.000000e+000  +1.000000e+000  +3.000000e+000  ]
  [  +0.000000e+000  +0.000000e+000  +8.000000e+000  +5.000000e+000  ]
  [  +0.000000e+000  +0.000000e+000  +0.000000e+000  +3.000000e+000  ]

triu(a,1) =
  [  +0.000000e+000  +3.000000e+000  +3.000000e+000  +9.000000e+000  ]
  [  +0.000000e+000  +0.000000e+000  +1.000000e+000  +3.000000e+000  ]
  [  +0.000000e+000  +0.000000e+000  +0.000000e+000  +5.000000e+000  ]
  [  +0.000000e+000  +0.000000e+000  +0.000000e+000  +0.000000e+000  ]

tril(a,0) =
  [  +1.000000e+000  +0.000000e+000  +0.000000e+000  +0.000000e+000  ]
  [  +4.000000e+000  -2.000000e+000  +0.000000e+000  +0.000000e+000  ]
  [  +6.000000e+000  -4.000000e+000  +8.000000e+000  +0.000000e+000  ]
  [  -2.000000e+000  +3.000000e+000  -7.000000e+000  +3.000000e+000  ]

tril(a,1) =
  [  +1.000000e+000  +3.000000e+000  +0.000000e+000  +0.000000e+000  ]
  [  +4.000000e+000  -2.000000e+000  +1.000000e+000  +0.000000e+000  ]
  [  +6.000000e+000  -4.000000e+000  +8.000000e+000  +5.000000e+000  ]
  [  -2.000000e+000  +3.000000e+000  -7.000000e+000  +3.000000e+000  ]

*/

INT FVALGAPI fnFIE_mat_tril ( const FMATRIX a,
FMATRIX ad,
INT  k 
)

下三角成分の抽出

MxN行列 A の下三角部を取り出し ad に出力します。
ad の対角成分を除く上三角部は 0 が格納されます。

k は対角位置を指定するパラメータで、k=0は主対角を示します。 k>0のとき主対角よりも上側の対角を、k<0のとき主対角成分より下側の対角を示します。 $ min(M,N) \le |k| $ と指定した場合、エラーとなります。

aad は同じポインタを渡すことが出来ます。

fmatrix_diag.png

引数:
[in] a MxN入力行列A
[out] ad MxN行列。aの下三角要素が格納される。
[in] k 対角位置
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
example code
// エラー処理は省略しているので注意して下さい。
#include <stdio.h>
#include "fie.h"

static VOID mat_print( FMATRIX *a )
{
    INT i,j;
    for( j=0; j<a->row; j++ ){
        printf( "  [  " );
        for( i=0; i<a->col; i++ ){
            printf( "%+0.6e  ", a->m[j][i] );
        }
        printf( "]\n" );
    }
    printf( "\n" );
}

INT main()
{
    FMATRIX *a=NULL, *b=NULL, *c=NULL;

    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    a = fnFIE_mat_aalloc( 4, 4 ); // 4x4行列 a を確保
    b = fnFIE_mat_aalloc( 4, 4 ); // 4x4行列 b を確保

    // 入力値をセット
    a->m[0][0] = 1.0;  a->m[0][1] = 3.0;  a->m[0][2] = 3.0;  a->m[0][3] = 9.0;
    a->m[1][0] = 4.0;  a->m[1][1] =-2.0;  a->m[1][2] = 1.0;  a->m[1][3] = 3.0;
    a->m[2][0] = 6.0;  a->m[2][1] =-4.0;  a->m[2][2] = 8.0;  a->m[2][3] = 5.0;
    a->m[3][0] =-2.0;  a->m[3][1] = 3.0;  a->m[3][2] =-7.0;  a->m[3][3] = 3.0;

    printf( "a =\n" );  mat_print( a );
    
    // 上三角行列を取得
    fnFIE_mat_triu( a, b, 0 );
    printf( "triu(a,0) =\n" );
    mat_print( b );

    fnFIE_mat_triu( a, b, 1 );
    printf( "triu(a,1) =\n" );
    mat_print( b );

    // 下三角行列を取得
    fnFIE_mat_tril( a, b, 0 );
    printf( "tril(a,0) =\n" );
    mat_print( b );

    fnFIE_mat_tril( a, b, 1 );
    printf( "tril(a,1) =\n" );
    mat_print( b );
    
    fnFIE_mat_afree( a );
    fnFIE_mat_afree( b );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

/*
結果

a =
  [  +1.000000e+000  +3.000000e+000  +3.000000e+000  +9.000000e+000  ]
  [  +4.000000e+000  -2.000000e+000  +1.000000e+000  +3.000000e+000  ]
  [  +6.000000e+000  -4.000000e+000  +8.000000e+000  +5.000000e+000  ]
  [  -2.000000e+000  +3.000000e+000  -7.000000e+000  +3.000000e+000  ]

triu(a,0) =
  [  +1.000000e+000  +3.000000e+000  +3.000000e+000  +9.000000e+000  ]
  [  +0.000000e+000  -2.000000e+000  +1.000000e+000  +3.000000e+000  ]
  [  +0.000000e+000  +0.000000e+000  +8.000000e+000  +5.000000e+000  ]
  [  +0.000000e+000  +0.000000e+000  +0.000000e+000  +3.000000e+000  ]

triu(a,1) =
  [  +0.000000e+000  +3.000000e+000  +3.000000e+000  +9.000000e+000  ]
  [  +0.000000e+000  +0.000000e+000  +1.000000e+000  +3.000000e+000  ]
  [  +0.000000e+000  +0.000000e+000  +0.000000e+000  +5.000000e+000  ]
  [  +0.000000e+000  +0.000000e+000  +0.000000e+000  +0.000000e+000  ]

tril(a,0) =
  [  +1.000000e+000  +0.000000e+000  +0.000000e+000  +0.000000e+000  ]
  [  +4.000000e+000  -2.000000e+000  +0.000000e+000  +0.000000e+000  ]
  [  +6.000000e+000  -4.000000e+000  +8.000000e+000  +0.000000e+000  ]
  [  -2.000000e+000  +3.000000e+000  -7.000000e+000  +3.000000e+000  ]

tril(a,1) =
  [  +1.000000e+000  +3.000000e+000  +0.000000e+000  +0.000000e+000  ]
  [  +4.000000e+000  -2.000000e+000  +1.000000e+000  +0.000000e+000  ]
  [  +6.000000e+000  -4.000000e+000  +8.000000e+000  +5.000000e+000  ]
  [  -2.000000e+000  +3.000000e+000  -7.000000e+000  +3.000000e+000  ]

*/

INT FVALGAPI fnFIE_mat_circshift ( const FMATRIX a,
FMATRIX ad,
INT  sx,
INT  sy 
)

行列要素の循環シフト

行列Aの要素を sx, sy で指定された分だけ循環的にシフトします。
sx が正の場合、右方向へシフトし、負の場合、左方向へシフトします。 sy が正の場合、下方向へシフトし、負の場合、上方向へシフトします。

aad は同じポインタを渡すことは出来ません。 正しい結果が得られないことがあります。

引数:
[in] a MxN入力行列A
[out] ad シフトされたMxN行列
[in] sx 列方向循環シフト量
[in] sy 行方向循環シフト量
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
example code
// エラー処理は省略しているので注意して下さい。
#include <stdio.h>
#include "fie.h"

static VOID mat_print( FMATRIX *a )
{
    INT i,j;
    for( j=0; j<a->row; j++ ){
        printf( "  [  " );
        for( i=0; i<a->col; i++ ){
            printf( "%+0.6e  ", a->m[j][i] );
        }
        printf( "]\n" );
    }
    printf( "\n" );
}

INT main()
{
    FMATRIX *a=NULL, *b=NULL, *c=NULL;

    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    a = fnFIE_mat_aalloc( 4, 4 ); // 4x4行列 a を確保
    b = fnFIE_mat_aalloc( 4, 4 ); // 4x4行列 b を確保

    // 入力値をセット
    a->m[0][0] = 1.0;  a->m[0][1] = 5.0;  a->m[0][2] = 9.0;  a->m[0][3] =13.0;
    a->m[1][0] = 2.0;  a->m[1][1] = 6.0;  a->m[1][2] =10.0;  a->m[1][3] =14.0;
    a->m[2][0] = 3.0;  a->m[2][1] = 7.0;  a->m[2][2] =11.0;  a->m[2][3] =15.0;
    a->m[3][0] = 4.0;  a->m[3][1] = 8.0;  a->m[3][2] =12.0;  a->m[3][3] =16.0;

    printf( "a =\n" );  mat_print( a );

    // x シフト
    fnFIE_mat_circshift( a, b, 1, 0 );
    printf( "circshift(a,sx=>1,sy=>0) =\n" );
    mat_print( b );

    fnFIE_mat_circshift( a, b, -1, 0 );
    printf( "circshift(a,sx=>-1,sy=>0) =\n" );
    mat_print( b );

    // y シフト
    fnFIE_mat_circshift( a, b, 0, 1 );
    printf( "circshift(a,sx=>0,sy=>1) =\n" );
    mat_print( b );

    fnFIE_mat_circshift( a, b, 0, -1 );
    printf( "circshift(a,sx=>0,sy=>-1) =\n" );
    mat_print( b );
    
    fnFIE_mat_afree( a );
    fnFIE_mat_afree( b );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

/*
結果

a =
  [  +1.000000e+000  +5.000000e+000  +9.000000e+000  +1.300000e+001  ]
  [  +2.000000e+000  +6.000000e+000  +1.000000e+001  +1.400000e+001  ]
  [  +3.000000e+000  +7.000000e+000  +1.100000e+001  +1.500000e+001  ]
  [  +4.000000e+000  +8.000000e+000  +1.200000e+001  +1.600000e+001  ]

circshift(a,sx=>1,sy=>0) =
  [  +1.300000e+001  +1.000000e+000  +5.000000e+000  +9.000000e+000  ]
  [  +1.400000e+001  +2.000000e+000  +6.000000e+000  +1.000000e+001  ]
  [  +1.500000e+001  +3.000000e+000  +7.000000e+000  +1.100000e+001  ]
  [  +1.600000e+001  +4.000000e+000  +8.000000e+000  +1.200000e+001  ]

circshift(a,sx=>-1,sy=>0) =
  [  +5.000000e+000  +9.000000e+000  +1.300000e+001  +1.000000e+000  ]
  [  +6.000000e+000  +1.000000e+001  +1.400000e+001  +2.000000e+000  ]
  [  +7.000000e+000  +1.100000e+001  +1.500000e+001  +3.000000e+000  ]
  [  +8.000000e+000  +1.200000e+001  +1.600000e+001  +4.000000e+000  ]

circshift(a,sx=>0,sy=>1) =
  [  +4.000000e+000  +8.000000e+000  +1.200000e+001  +1.600000e+001  ]
  [  +1.000000e+000  +5.000000e+000  +9.000000e+000  +1.300000e+001  ]
  [  +2.000000e+000  +6.000000e+000  +1.000000e+001  +1.400000e+001  ]
  [  +3.000000e+000  +7.000000e+000  +1.100000e+001  +1.500000e+001  ]

circshift(a,sx=>0,sy=>-1) =
  [  +2.000000e+000  +6.000000e+000  +1.000000e+001  +1.400000e+001  ]
  [  +3.000000e+000  +7.000000e+000  +1.100000e+001  +1.500000e+001  ]
  [  +4.000000e+000  +8.000000e+000  +1.200000e+001  +1.600000e+001  ]
  [  +1.000000e+000  +5.000000e+000  +9.000000e+000  +1.300000e+001  ]

*/

INT FVALGAPI fnFIE_mat_horzcat ( const FMATRIX a1,
const FMATRIX a2,
FMATRIX ad 
)

行列要素の水平方向結合

行列 a1 と 行列 a2 を水平方向に結合し、結合した行列 ad を出力します。
行列 a1 と 行列 a2 、及び 行列 ad の次元は次の条件をすべて満たしていなければいけません。

  • a1->row == a2->row == ad->row
  • a1->col + a2->col == ad->col

a1a2 は同じポインタを渡すことが出来ます。

引数:
[in] a1 入力行列A1
[in] a2 入力行列A2
[out] ad A1とA2を結合した行列
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
example code
// エラー処理は省略しているので注意して下さい。
#include <stdio.h>
#include "fie.h"

static VOID mat_print( FMATRIX *a )
{
    INT i,j;
    for( j=0; j<a->row; j++ ){
        printf( "  [  " );
        for( i=0; i<a->col; i++ ){
            printf( "%+0.6e  ", a->m[j][i] );
        }
        printf( "]\n" );
    }
    printf( "\n" );
}

INT main()
{
    FMATRIX *a=NULL, *b=NULL, *c=NULL, *d=NULL;

    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    a = fnFIE_mat_aalloc( 2, 2 ); // 2x2行列 a を確保
    b = fnFIE_mat_aalloc( 2, 2 ); // 2x2行列 b を確保
    c = fnFIE_mat_aalloc( 2, 4 ); // 2x4行列 c を確保
    d = fnFIE_mat_aalloc( 4, 2 ); // 4x2行列 d を確保

    // 入力値をセット
    a->m[0][0] = 1.0;  a->m[0][1] = 5.0;
    a->m[1][0] = 2.0;  a->m[1][1] = 6.0;
    b->m[0][0] = 3.0;  b->m[0][1] = 7.0;
    b->m[1][0] = 4.0;  b->m[1][1] = 8.0;

    printf( "a =\n" );  mat_print( a );
    printf( "b =\n" );  mat_print( b );

    // 水平方向結合
    fnFIE_mat_horzcat( a, b, c );
    printf( "horzcat(a,b) =\n" );
    mat_print( c );

    // 垂直方向結合
    fnFIE_mat_vertcat( a, b, d );
    printf( "vertcat(a,b) =\n" );
    mat_print( d );
    
    fnFIE_mat_afree( a );
    fnFIE_mat_afree( b );
    fnFIE_mat_afree( c );
    fnFIE_mat_afree( d );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

/*
結果

a =
  [  +1.000000e+000  +5.000000e+000  ]
  [  +2.000000e+000  +6.000000e+000  ]

b =
  [  +3.000000e+000  +7.000000e+000  ]
  [  +4.000000e+000  +8.000000e+000  ]

horzcat(a,b) =
  [  +1.000000e+000  +5.000000e+000  +3.000000e+000  +7.000000e+000  ]
  [  +2.000000e+000  +6.000000e+000  +4.000000e+000  +8.000000e+000  ]

vertcat(a,b) =
  [  +1.000000e+000  +5.000000e+000  ]
  [  +2.000000e+000  +6.000000e+000  ]
  [  +3.000000e+000  +7.000000e+000  ]
  [  +4.000000e+000  +8.000000e+000  ]

*/

INT FVALGAPI fnFIE_mat_vertcat ( const FMATRIX a1,
const FMATRIX a2,
FMATRIX ad 
)

行列要素の垂直方向結合

行列 a1 と 行列 a2 を垂直方向に結合し、結合した行列 ad を出力します。
行列 a1 と 行列 a2 、及び 行列 ad の次元は次の条件をすべて満たしていなければいけません。

  • a1->col == a2->col == ad->col
  • a1->row + a2->row == ad->row

a1a2 は同じポインタを渡すことが出来ます。

引数:
[in] a1 入力行列A1
[in] a2 入力行列A2
[out] ad A1とA2を結合した行列
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
example code
// エラー処理は省略しているので注意して下さい。
#include <stdio.h>
#include "fie.h"

static VOID mat_print( FMATRIX *a )
{
    INT i,j;
    for( j=0; j<a->row; j++ ){
        printf( "  [  " );
        for( i=0; i<a->col; i++ ){
            printf( "%+0.6e  ", a->m[j][i] );
        }
        printf( "]\n" );
    }
    printf( "\n" );
}

INT main()
{
    FMATRIX *a=NULL, *b=NULL, *c=NULL, *d=NULL;

    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    a = fnFIE_mat_aalloc( 2, 2 ); // 2x2行列 a を確保
    b = fnFIE_mat_aalloc( 2, 2 ); // 2x2行列 b を確保
    c = fnFIE_mat_aalloc( 2, 4 ); // 2x4行列 c を確保
    d = fnFIE_mat_aalloc( 4, 2 ); // 4x2行列 d を確保

    // 入力値をセット
    a->m[0][0] = 1.0;  a->m[0][1] = 5.0;
    a->m[1][0] = 2.0;  a->m[1][1] = 6.0;
    b->m[0][0] = 3.0;  b->m[0][1] = 7.0;
    b->m[1][0] = 4.0;  b->m[1][1] = 8.0;

    printf( "a =\n" );  mat_print( a );
    printf( "b =\n" );  mat_print( b );

    // 水平方向結合
    fnFIE_mat_horzcat( a, b, c );
    printf( "horzcat(a,b) =\n" );
    mat_print( c );

    // 垂直方向結合
    fnFIE_mat_vertcat( a, b, d );
    printf( "vertcat(a,b) =\n" );
    mat_print( d );
    
    fnFIE_mat_afree( a );
    fnFIE_mat_afree( b );
    fnFIE_mat_afree( c );
    fnFIE_mat_afree( d );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

/*
結果

a =
  [  +1.000000e+000  +5.000000e+000  ]
  [  +2.000000e+000  +6.000000e+000  ]

b =
  [  +3.000000e+000  +7.000000e+000  ]
  [  +4.000000e+000  +8.000000e+000  ]

horzcat(a,b) =
  [  +1.000000e+000  +5.000000e+000  +3.000000e+000  +7.000000e+000  ]
  [  +2.000000e+000  +6.000000e+000  +4.000000e+000  +8.000000e+000  ]

vertcat(a,b) =
  [  +1.000000e+000  +5.000000e+000  ]
  [  +2.000000e+000  +6.000000e+000  ]
  [  +3.000000e+000  +7.000000e+000  ]
  [  +4.000000e+000  +8.000000e+000  ]

*/

INT FVALGAPI fnFIE_mat_flipdim ( const FMATRIX a,
FMATRIX ad,
INT  mode 
)

行列要素の反転

a を指定した次元に関して反転させた行列を返します。 mode=1のとき、行方向に上下反転させます。 mode=2のとき、列方向に左右反転させます。 aad の次元は等しくなければいけません。

aad は同じポインタを渡すことは出来ません。 正しい結果が得られません。

引数:
[in] a 入力行列
[out] ad 反転された行列
[in] mode 反転させる次元
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
example code
// エラー処理は省略しているので注意して下さい。
#include <stdio.h>
#include "fie.h"

static VOID mat_print( FMATRIX *a )
{
    INT i,j;
    for( j=0; j<a->row; j++ ){
        printf( "  [  " );
        for( i=0; i<a->col; i++ ){
            printf( "%+0.6e  ", a->m[j][i] );
        }
        printf( "]\n" );
    }
    printf( "\n" );
}

INT main()
{
    FMATRIX *a=NULL, *b=NULL;

    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    a = fnFIE_mat_aalloc( 4, 4 ); // 4x4行列 a を確保
    b = fnFIE_mat_aalloc( 4, 4 ); // 4x4行列 b を確保

    // 入力値をセット
    a->m[0][0] = 1.0;  a->m[0][1] = 5.0;  a->m[0][2] = 9.0;  a->m[0][3] =13.0;
    a->m[1][0] = 2.0;  a->m[1][1] = 6.0;  a->m[1][2] =10.0;  a->m[1][3] =14.0;
    a->m[2][0] = 3.0;  a->m[2][1] = 7.0;  a->m[2][2] =11.0;  a->m[2][3] =15.0;
    a->m[3][0] = 4.0;  a->m[3][1] = 8.0;  a->m[3][2] =12.0;  a->m[3][3] =16.0;

    printf( "a =\n" );  mat_print( a );

    // mode=1
    fnFIE_mat_flipdim( a, b, 1 );
    printf( "flipdim(a,mode=>1) =\n" );
    mat_print( b );

    // mode=2
    fnFIE_mat_flipdim( a, b, 2 );
    printf( "flipdim(a,mode=>2) =\n" );
    mat_print( b );
    
    fnFIE_mat_afree( a );
    fnFIE_mat_afree( b );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

/*
結果

a =
  [  +1.000000e+000  +5.000000e+000  +9.000000e+000  +1.300000e+001  ]
  [  +2.000000e+000  +6.000000e+000  +1.000000e+001  +1.400000e+001  ]
  [  +3.000000e+000  +7.000000e+000  +1.100000e+001  +1.500000e+001  ]
  [  +4.000000e+000  +8.000000e+000  +1.200000e+001  +1.600000e+001  ]

flipdim(a,mode=>1) =
  [  +4.000000e+000  +8.000000e+000  +1.200000e+001  +1.600000e+001  ]
  [  +3.000000e+000  +7.000000e+000  +1.100000e+001  +1.500000e+001  ]
  [  +2.000000e+000  +6.000000e+000  +1.000000e+001  +1.400000e+001  ]
  [  +1.000000e+000  +5.000000e+000  +9.000000e+000  +1.300000e+001  ]

flipdim(a,mode=>2) =
  [  +1.300000e+001  +9.000000e+000  +5.000000e+000  +1.000000e+000  ]
  [  +1.400000e+001  +1.000000e+001  +6.000000e+000  +2.000000e+000  ]
  [  +1.500000e+001  +1.100000e+001  +7.000000e+000  +3.000000e+000  ]
  [  +1.600000e+001  +1.200000e+001  +8.000000e+000  +4.000000e+000  ]

*/

INT FVALGAPI fnFIE_mat_rand ( FMATRIX a  ) 

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

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

覚え書き:
このライブラリはFVALG_OSS内の fnFIE_mtrand_* を使用しています
引数:
[in,out] a 値を設定する行列
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ不正終了
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー


Documentation copyright © 2009-2024 FAST Corporation.
Generated on Fri Aug 9 16:38:48 2024 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2