行列型を扱う関数は、原則として、どの行列型であるかに応じて関数名が決められています。
SMatrix型の場合は関数名がsmで、
LMatrix型の場合は関数名がlmで、
FMatrix型の場合は関数名がfmで、
DMatrix型の場合は関数名がdmで始まります。
さらに、戻り値のメモリ解放を行う必要がある関数は、xで関数名が始まります。
すなわち、この場合、それぞれの行列型において、xsm、xlm、xfm、xdmで始まることになります。
以下では、ほとんどの場合、この接頭辞の部分を省いて説明がしてあります。
- 目的
- 行列型は、行列演算を行う関数の引数や戻り値として用いられる型です。
short型を扱うためのSMatrix型、long型を扱うためのLMatrix型、
float型を扱うためのFMatrix型、double型を扱うためのDMatrix型が
用意されています。
- 書式
-
typedef struct _SMatrix {
long row;
long col;
short **data;
short **imag;
} *SMatrix;
typedef struct _LMatrix {
long row;
long col;
long **data;
long **imag;
} *LMatrix;
typedef struct _FMatrix {
long row;
long col;
float **data;
float **imag;
} *FMatrix;
typedef struct _DMatrix {
long row;
long col;
double **data;
double **imag;
} *DMatrix;
- メンバ
-
- row
- 行の大きさを保持します。
- col
- 列の大きさを保持します。
- data
- 実部のデータを保持します。
- imag
- 虚部のデータを保持します。虚部が存在しない場合はNULLであることがあります。
- 説明
- メモリ確保するには、メモリ確保関数
を呼び出す必要があります。
メモリ確保された行列型xがあった場合、その行の大きさは
x->rowで、その列の大きさはx->colで取得できます。
また、実部の1行1列目(2次元配列の0行0列目)、1行2列目(2次元配列の0行1列目)の要素を取り出すには、
x->data[0][0]、x->data[0][1]とし、
同様に、虚部の1行1列目、1行2列目の要素を取り出すには、
x->imag[0][0]、x->imag[0][1]
とします。
- 関連項目
-
メモリ
- 目的
- 行列型のメモリ確保や解放を行います。
- 書式
-
#include
LMatrix xlmalloc(long row, long col);
DMatrix xdmalloc(long row, long col);
void xlmfree(LMatrix matrix);
void xdmfree(DMatrix matrix);
void lmialloc(LMatrix matrix);
void dmialloc(DMatrix matrix);
void lmifree(LMatrix matrix);
void dmifree(DMatrix matrix);
LMatrix xlmrialloc(long row, long col);
DMatrix xdmrialloc(long row, long col);
- 引数
-
- matrix
- 入力行列
- row
- 行の大きさ
- col
- 列の大きさ
- 戻り値
- 戻り値が行列型の場合は、メモリ確保された行列型が返ります。
行列データの中身は初期化されません。
- 説明
- 戻り値が行列型の場合は、使用しなくなったらメモリの解放をして下さい。
それぞれの関数は、以下のような処理を行います。
- alloc: 実部のメモリを確保します。
- free: メモリを解放します。
- ialloc: 虚部のメモリを確保します。
- ifree: 虚部のメモリを解放します。
- rialloc: 実部と虚部のメモリを確保します。
- 関連項目
-
行列初期化
- 目的
- 行列型の初期化を行います。
- 書式
-
#include
LMatrix xlmnums(long row, long col, long value);
DMatrix xdmnums(long row, long col, double value);
void lmnums(LMatrix mat, long row, long col, long value);
void dmnums(DMatrix mat, long row, long col, double value);
void lminums(LMatrix mat, long row, long col, long value);
void dminums(DMatrix mat, long row, long col, double value);
LMatrix xlmrinums(long row, long col, long value);
DMatrix xdmrinums(long row, long col, double value);
LMatrix xlmzeros(long row, long col);
DMatrix xdmzeros(long row, long col);
void lmzeros(long row, long col);
void dmzeros(long row, long col);
void lmizeros(long row, long col);
void dmizeros(long row, long col);
LMatrix xlmrizeros(long row, long col);
DMatrix xdmrizeros(long row, long col);
LMatrix xlmones(long row, long col);
DMatrix xdmones(long row, long col);
void lmones(long row, long col);
void dmones(long row, long col);
void lmiones(long row, long col);
void dmiones(long row, long col);
LMatrix xlmriones(long row, long col);
DMatrix xdmriones(long row, long col);
LMatrix xlmeye(long row, long col);
DMatrix xdmeye(long row, long col);
DMatrix xdminitrow(long row, double j, double incr, double n);
DMatrix xdminitcol(long col, double j, double incr, double n);
void lmreal(LMatrix matrix);
void dmreal(DMatrix matrix);
void lmimag(LMatrix matrix);
void dmimag(DMatrix matrix);
- 引数
-
- matrix
- 入力行列
- row
- 行の大きさ
- col
- 列の大きさ
- j
- 行もしくは列の最初の要素の値
- incr
- 行もしくは列の要素の増分
- n
- 行もしくは列の最後の要素の値
- value
- 初期化する際の行列の要素の値
- 戻り値
- 戻り値が行列型の場合は、メモリ確保された行列型が返ります。
- 説明
- 戻り値が行列型の場合は、使用しなくなったらメモリの解放をして下さい。
それぞれの関数は、以下のような処理を行います。
- nums: 行列の実部の全ての要素を同一の値に初期化します。
- inums: 行列の虚部の全ての要素を同一の値に初期化します。
- rinums: 行列の実部と虚部の全ての要素を同一の値に初期化します。
- zeros: 行列の実部の全ての要素を0に初期化します。
- izeros: 行列の虚部の全ての要素を0に初期化します。
- rizeros: 行列の実部と虚部の全ての要素を0に初期化します。
- ones: 行列の実部の全ての要素を1に初期化します。
- iones: 行列の虚部の全ての要素を1に初期化します。
- riones: 行列の実部と虚部の全ての要素を1に初期化します。
- initrow:
行列の全ての行について、実部の要素の開始値・増分・終了値を指定して初期化します。
- initcol:
行列の全ての列について、実部の要素の開始値・増分・終了値を指定して初期化します。
- real: 虚部のメモリを解放し、実部のみのデータにします。
- imag: 虚部のみのデータにします。元々の虚部は実部にコピーされます。
- 関連項目
-
メモリ
- 目的
- 行列型のコピーやペーストなどを行います。
- 書式
-
#include
LMatrix xlmclone(LMatrix x);
DMatrix xdmclone(DMatrix x);
void lmcopyrow(LMatrix mat, long row, LVector vec);
void dmcopyrow(DMatrix mat, long row, DVector vec);
void lmcopycol(LMatrix mat, long col, LVector vec);
void dmcopycol(DMatrix mat, long col, DVector vec);
void lmpasterow(LMatrix mat, long row, LVector vec,
long offset, long length, int overlap);
void dmpasterow(DMatrix mat, long row, DVector vec,
long offset, long length, int overlap);
void lmpastecol(LMatrix mat, long col, LVector vec,
long offset, long length, int overlap);
void dmpastecol(DMatrix mat, long col, DVector vec,
long offset, long length, int overlap);
- 引数
-
- x
- 入力行列
- mat
- 貼り付け先の行列
- row
- 貼り付け先の行
- col
- 貼り付け先の列
- vec
- コピーするベクトル
- offset
- ベクトルをコピーするときの開始位置
- length
- ベクトルをコピーする長さ
- overlap
- この値が非零の場合は、加算処理を行う。
- 戻り値
- 戻り値が行列型の場合は、メモリ確保された行列型が返ります。
- 説明
- 戻り値が行列型の場合は、使用しなくなったらメモリの解放をして下さい。
それぞれの関数は、以下のような処理を行います。
- clone: 同一の行列を新たに作成します。
- copyrow: vecのデータを行列matの特定の行にコピーします。
- copycol: vecのデータを行列matの特定の列にコピーします。
- pasterow: vecのデータの一部分を行列matの特定の行に貼り付けます。
overlapの値が非零の場合は、matのデータにvecのデータを加算します。
- pastecol: vecのデータの一部分を行列matの特定の列に貼り付けます。
overlapの値が非零の場合は、matのデータにvecのデータを加算します。
- 関連項目
-
メモリ
- 目的
- 行列型からデータを取り出します。
- 書式
-
#include
LVector xlmcutrow(LMatrix mat, long row, long offset, long length);
DVector xdmcutrow(DMatrix mat, long row, long offset, long length);
LVector xlmcutcol(LMatrix mat, long col, long offset, long length);
DVector xdmcutcol(DMatrix mat, long col, long offset, long length);
LVector xlmextractrow(LMatrix mat, long row);
DVector xdmextractrow(DMatrix mat, long row);
LVector xlmextractcol(LMatrix mat, long col);
DVector xdmextractcol(DMatrix mat, long col);
LVector xlmrmax(LMatrix mat);
LVector xdmrmax(DMatrix mat);
LVector xlmrmin(LMatrix mat);
LVector xdmrmin(DMatrix mat);
LVector xlmrextract(LMatrix mat, LVector idx);
DVector xdmrextract(DMatrix mat, LVector idx);
LVector xlmcmax(LMatrix mat);
LVector xdmcmax(DMatrix mat);
LVector xlmcmin(LMatrix mat);
LVector xdmcmin(DMatrix mat);
LVector xlmcextract(LMatrix mat, LVector idx);
DVector xdmcextract(DMatrix mat, LVector idx);
double xdmmin(DMatrix mat, long *prow, long *pcol);
double xdmmax(DMatrix mat, long *prow, long *pcol);
- 引数
-
- mat
- 入力行列
- row
- 取り出し元の行
- col
- 貼り付け先の列
- vec
- コピーするベクトル
- offset
- コピーするときの開始位置
- length
- コピーする長さ
- idx
- 行インデックス(何行目か)もしくは列インデックス(何列目か)を表すベクトル
- prow
- 最大値もしくは最小値を取る要素の行インデックスを取得する場合に指定する。
- col
- 最大値もしくは最小値を取る要素の列インデックスを取得する場合に指定する。
- 戻り値
- 戻り値がベクトル型の場合は、メモリ確保されたベクトル型が返ります。
- 説明
- 戻り値がベクトル型の場合は、使用しなくなったらメモリの解放をして下さい。
それぞれの関数は、以下のような処理を行います。
- cutrow: matの特定の行の一部分を取り出し、それをベクトルとして返します。
- cutcol: matの特定の列の一部分を取り出し、それをベクトルとして返します。
- extractrow: matの特定の行の全体を取り出し、それをベクトルとして返します。
- extractcol: matの特定の列の全体を取り出し、それをベクトルとして返します。
- rmax: それぞれの行における最大値をベクトルに格納し、それを返します。
- rmin: それぞれの行における最小値をベクトルに格納し、それを返します。
- rextract: それぞれの行における特定の列の値をベクトルに格納し、それを返します。
- cmax: それぞれの列における最大値をベクトルに格納し、それを返します。
- cmin: それぞれの列における最小値をベクトルに格納し、それを返します。
- cextract: それぞれの列における特定の行の値をベクトルに格納し、それを返します。
- max: 行列の全ての要素の中から最大値を求めます。
- min: 行列の全ての要素の中から最小値を求めます。
- 関連項目
-
ベクトル型、
メモリ
- 目的
- 行列の計算
- 書式
-
#include
spBool dmlu(DMatrix A, LVector *index, double *det);
DMatrix xdmlu(DMatrix A, LVector *index, double *det);
DMatrix xdmluupper(DMatrix LU, LVector index);
DMatrix xdmlulower(DMatrix LU, LVector index);
DMatrix xdmludiag(DMatrix LU, LVector index);
DMatrix xdmluinv(DMatrix LU, LVector index);
DVector xdvlusolve(DMatrix LU, LVector index, DVector b);
DMatrix xdminv(DMatrix A);
DVector xdvmldivide(DMatrix A, DVector b);
DVector xdvdiag(DMatrix A);
DMatrix xdmdiag(DMatrix A);
DMatrix xdmmakediag(DVector d);
DMatrix xdmtranspose(DMatrix A);
DMatrix xdmtimes(DMatrix A, DMatrix B);
DVector xdvmtimes(DMatrix A, DVector x);
- 引数
-
- A、B
- 入力行列
- LU
- 下三角行列と上三角行列を組み合わせた行列
- index
- LU分解した際の行の並べ替え情報。使用しなくなったらメモリを解放して下さい。
- det
- 行列式の値。この値が不要であれば、NULLを指定することができます。
- b、x
- 入力ベクトル
- d
- 対角行列の対角成分となるベクトル
- 戻り値
- 戻り値がベクトル型の場合は、メモリ確保されたベクトル型が、
行列型の場合は、メモリ確保された行列型が返ります。
- 説明
- 戻り値がベクトル型・行列型の場合は、使用しなくなったらメモリの解放をして下さい。
それぞれの関数は、以下のような処理を行います。
- lu: LU分解を行います。indexには行の入れ替え情報が入ります。
indexは、LU分解の結果を用いる多くの関数で必要となります。
indexはメモリ確保されますので、不要になったらメモリの解放をして下さい。
- luupper: LU分解の結果から上三角行列を取り出します。
- lulower: LU分解の結果から下三角行列を取り出します。
- ludiag: LU分解の結果から対角行列を取り出します。
- luinv: LU分解の結果を用い、逆行列を求めます。
- lusolve: LU分解の結果を用い、連立方程式を解きます。
- inv: 行列Aの逆行列を、LU分解を利用して求めます。
- mldivide: 行列Aとbの左除算を、LU分解を利用して求めます。
- vdiag: 行列Aの対角要素をベクトルとして取り出します。
- mdiag: 行列Aの対角行列を取り出します。
- makediag: 対角要素を表すベクトルから、対角行列を作成します。
- transpose: 行列Aの転置を求めます。
- mtimes: 行列Aと行列Bの積を求めます。
Aの列数とBの行数が同じである必要があります。
- vmtimes: 行列Aとベクトルxの積を求めます。
Aの列数とxの長さが同じである必要があります。
- 関連項目
-
ベクトル型、
メモリ
Last modified: "2012-06-09 00:33:44 hideki"