MatrixInfo

このメソッドは行列の内容を解析し、その構造タイプ(対称、エルミート、三角、帯行列など)を判定して、MqlMatrixInfo 構造体に値を格納します。

bool matrix::MatrixInfo(
  MqlMatrixInfo&  info      // 行列情報
  );

パラメータ

info

[out]  行列情報が格納される MqlMatrixInfo 型のオブジェクトです。

戻り値

行列が初期化され、サイズが 0 でない場合は true を返します。それ以外の場合は false を返します。

注意

MqlMatrixInfo 構造体のオブジェクトには、個々の行列分類メソッドが提供できる情報よりも多くの情報が含まれます(IsSymmetric, IsHermitian, IsUpperTriangular など)。

MqlMatrixInfo 構造体

struct MqlMatrixInfo
 {
  ushort           version,          // 5950
  char             signature[2],    // "GE", "SY", "HE", "TR", ...
  ENUM_BLAS_TYPE   matrix_class,    // BLASTYPE_GE、BLASTYPE_SY、BLASTYPE_HE などはシグネチャと一致する必要があります
  ENUM_DATATYPE   data_type,        // TYPE_MATRIXD, TYPE_MATRIXF, TYPE_MATRIXCD, TYPE_MATRIXCF
  uint             flags,            // MATRIX_UPPER, MATRIX_LOWER, MATRIX_UNITDIAG, ...
  ulong             rows,            // 行列の行数
  ulong             cols,            // 行列の列数
  ulong             nnz,              // 非ゼロ要素数
  long             lower_bandwidth, // kl: 非ゼロの可能性がある下対角線の数
  long             upper_bandwidth, // ku: 非ゼロの可能性がある上対角線の数
  ulong             data_size,        // 後続データのサイズ(バイト単位)
 };

MqlMatrixInfo 構造体の情報は、行列をファイルに書き込む場合、およびファイルから行列を読み込む場合に使用されます。 data_size の値は、認識された行列クラスに応じて計算され、行列の保存に必要なバイト数を含みます。例えば、一般行列 (GE) は m * n * sizeof(type) バイトを占有します。一般帯行列 (GB) は (kl+ku+1) * n * sizeof(type) バイトを占有します。n x n の対称行列 (SY) は n * (n+1)/2 * sizeof(type) バイトを占有します。

ENUM_BLAS_TYPE

認識された行列のタイプを含む列挙です。

ID

説明

BLASTYPE_GE

'GE': 一般行列

BLASTYPE_BD      

'BD': 二重対角行列

BLASTYPE_DI

'DI': 対角行列

BLASTYPE_GB

'GB': 一般帯行列

BLASTYPE_GT

'GT': 一般三重対角行列

BLASTYPE_HB

'HB': エルミート帯行列

BLASTYPE_HE

'HE': エルミート行列

BLASTYPE_HT

'HT': エルミート三重対角行列

BLASTYPE_HS

'HS': ヘッセンベルグ行列

BLASTYPE_SB

'SB': 対称帯行列

BLASTYPE_ST

'ST': 対称三重対角行列

BLASTYPE_SY

'SY': 対称行列

BLASTYPE_TB

'TB': 三角帯行列

BLASTYPE_TR

'TR': 三角行列

BLASTYPE_TZ

'TZ': 台形行列

BLASTYPE_VE

'VE': ベクトル - ベクトルを書き込む場合および読み込む場合に使用されます

BLASTYPE_CO

'CO': 疎 COO - 行列またはベクトルを書き込む場合および読み込む場合に、'GE' または 'VE' として保存するより疎形式で保存する方が効率的な場合に使用されます

BLASTYPE_VE 型と BLASTYPE_CO 型は MatrixInfo メソッドから返されることはありません。残りの列挙項目の名前は、LAPACK で さまざまな行列クラスを表すために使用される略語に対応しています。HT 型は例外で、エルミート三重対角を表します。HT は標準の LAPACK 用語には存在せず、ST(対称三重対角)との類推により、エルミート三重対角行列を表すために導入されています。これにより、対応する行列をコンパクトに保存することもできます。

MqlMatrixInfo::flags

認識された行列タイプを詳しく指定するフラグです。

ID

説明

MATRIX_UPPER

0x0001

主対角線より上の上部

MATRIX_LOWER      

0x0002

主対角線より下の下部

MATRIX_UNITDIAG

0x0004

主対角線には 1 のみが含まれます

MATRIX_DIAGSCALAR

0x0008

主対角線には同じ値が含まれます

MATRIX_QUASI_TRIANGULAR

0x0010

準三角行列の可能性があります

MATRIX_TRIANGLE_RIGHT_ALIGNED

0x0020

上三角部分が横長行列の右端に揃えられています

MATRIX_TRIANGLE_BOTTOM_ALIGNED

0x0040

下三角部分が縦長行列の下端に揃えられています

列挙されたフラグ(MATRIX_QUASI_TRIANGULAR を除く)により、行列をよりコンパクトに保存できます。

 

  ulong   n=10;
  matrix matrix_a=matrix::Random(n,n);
  vectorc vector_ev;
  matrix matrix_t,matrix_z;
  MqlMatrixInfo info;
 
  matrix_a.EigenSolverSchur(EIGSCHUR_V,vector_ev,matrix_t,matrix_z);
  matrix_t.MatrixInfo(info);
  PrintFormat("%d, %c%c, %s, %s, 0x%04x, rows=%I64u, cols=%I64u, nnz=%I64u, lower_bandwidth=%I64d, upper_bandwidth=%I64d, data_size=%I64u",
              info.version,info.signature[0],info.signature[1],EnumToString(info.matrix_class),EnumToString(info.data_type),
              info.flags,info.rows,info.cols,info.nnz,info.lower_bandwidth,info.upper_bandwidth,info.data_size);
  string flags="";
  if((info.flags&MATRIX_UPPER)==MATRIX_UPPER)
    flags+="  MATRIX_UPPER";
  if((info.flags&MATRIX_LOWER)==MATRIX_LOWER)
    flags+="  MATRIX_LOWER";
  if((info.flags&MATRIX_UNITDIAG)==MATRIX_UNITDIAG)
    flags+="  MATRIX_UNITDIAG";
  if((info.flags&MATRIX_DIAGSCALAR)==MATRIX_DIAGSCALAR)
    flags+="  MATRIX_DIAGSCALAR";
  if((info.flags&MATRIX_QUASI_TRIANGULAR)==MATRIX_QUASI_TRIANGULAR)
    flags+="  MATRIX_QUASI_TRIANGULAR";
  if((info.flags&MATRIX_TRIANGLE_RIGHT_ALIGNED)==MATRIX_TRIANGLE_RIGHT_ALIGNED)
    flags+="  MATRIX_TRIANGLE_RIGHT_ALIGNED";
  if((info.flags&MATRIX_TRIANGLE_BOTTOM_ALIGNED)==MATRIX_TRIANGLE_BOTTOM_ALIGNED)
    flags+="  MATRIX_TRIANGLE_BOTTOM_ALIGNED";
  Print("info.flags :",flags);
 
 
  /*
  5950, HS, BLASTYPE_HS, TYPE_MATRIX, 0x0011, rows=10, cols=10, nnz=57, lower_bandwidth=1, upper_bandwidth=-1, data_size=512
  info.flags : MATRIX_UPPER MATRIX_QUASI_TRIANGULAR
  */