MatrixInfo

Yöntem matrisin içeriğini analiz eder, yapısal türünü (simetrik, Hermit, üçgensel, bantlı vb.) belirler ve MqlMatrixInfo yapısını doldurur.

bool matrix::MatrixInfo(
  MqlMatrixInfo&  info      // matris bilgisi
   );

Parametreler

info

[out]  Matris bilgisinin yerleştirildiği MqlMatrixInfo türünde bir nesne.

Dönüş Değeri

Matris başlatılmışsa ve sıfır olmayan bir boyuta sahipse true döndürür. Aksi halde false döndürülür.

Not

MqlMatrixInfo yapı nesnesi, tek tek matris sınıflandırma yöntemlerinin sağlayabileceğinden daha fazla bilgi içerir (IsSymmetric, IsHermitian, IsUpperTriangular vb.).

MqlMatrixInfo Yapısı

struct MqlMatrixInfo
  {
    ushort            version,          // 5950
   char              signature[2],     // "GE", "SY", "HE", "TR", ...
   ENUM_BLAS_TYPE    matrix_class,     // BLASTYPE_GE, BLASTYPE_SY, BLASTYPE_HE vb. imza ile eşleşmelidir
   ENUM_DATATYPE     data_type,        // TYPE_MATRIXD, TYPE_MATRIXF, TYPE_MATRIXCD, TYPE_MATRIXCF
    uint              flags,            // MATRIX_UPPER, MATRIX_LOWER, MATRIX_UNITDIAG, ...
    ulong             rows,             // matrisin satırları
    ulong             cols,             // matrisin sütunları
    ulong             nnz,              // sıfır olmayan eleman sayısı
    long              lower_bandwidth,  // kl: sıfır olmayan olası alt köşegen sayısı
    long              upper_bandwidth,  // ku: sıfır olmayan olası üst köşegen sayısı
    ulong             data_size,        // sonraki verilerin bayt cinsinden boyutu
  };

MqlMatrixInfo yapısındaki bilgiler, bir matrisi dosyaya yazarken ve bir matrisi dosyadan okurken kullanılır. data_size değeri, tanınan matris sınıfına bağlı olarak hesaplanır ve matrisi depolamak için gereken bayt sayısını içerir. Örneğin, genel bir matris (GE) m * n * sizeof(type) bayt kaplar. Genel bant matrisi (GB) (kl+ku+1) * n * sizeof(type) bayt kaplar. n x n boyutunda simetrik bir matris (SY) n * (n+1)/2 * sizeof(type) bayt kaplar.

ENUM_BLAS_TYPE

Tanınan matris türünü içeren numaralandırma.

ID

Açıklama

BLASTYPE_GE

'GE': genel matris

BLASTYPE_BD      

'BD': çift köşegenli matris

BLASTYPE_DI

'DI': köşegen matris

BLASTYPE_GB

'GB': genel bant matrisi

BLASTYPE_GT

'GT': genel üç köşegenli matris

BLASTYPE_HB

'HB': Hermit bant matrisi

BLASTYPE_HE

'HE': Hermit matrisi

BLASTYPE_HT

'HT': Hermit üç köşegenli matris

BLASTYPE_HS

'HS': Hessenberg matrisi

BLASTYPE_SB

'SB': simetrik bant matrisi

BLASTYPE_ST

'ST': simetrik üç köşegenli matris

BLASTYPE_SY

'SY': simetrik matris

BLASTYPE_TB

'TB': üçgensel bant matrisi

BLASTYPE_TR

'TR': üçgensel matris

BLASTYPE_TZ

'TZ': yamuksal matris

BLASTYPE_VE

'VE': vektör - vektörü yazarken ve okurken kullanılır

BLASTYPE_CO

'CO': seyrek COO - bir matrisi veya vektörü yazarken ve okurken, seyrek olarak depolamak 'GE' ya da 'VE' olarak depolamaktan daha verimli olduğunda kullanılır

BLASTYPE_VE ve BLASTYPE_CO türleri MatrixInfo yöntemi tarafından hiçbir zaman döndürülmez. Kalan numaralandırma öğelerinin adları, LAPACK içinde çeşitli matris sınıflarını belirtmek için kullanılan kısaltmalara karşılık gelir. HT türü bir istisnadır: Hermit üç köşegenli. HT, standart LAPACK terminolojisinde yer almaz ve Hermit üç köşegenli matrisi belirtmek için ST (simetrik üç köşegenli) ile analoji kurularak tanıtılmıştır; bu da ilgili matrisin kompakt biçimde depolanmasını sağlar.

MqlMatrixInfo::flags

Tanınan matris türünü ayrıntılandıran bayraklar.

ID

Değer

Açıklama

MATRIX_UPPER

0x0001

ana köşegenin üstündeki üst kısım

MATRIX_LOWER      

0x0002

ana köşegenin altındaki alt kısım

MATRIX_UNITDIAG

0x0004

ana köşegen yalnızca birlerden (1) oluşur

MATRIX_DIAGSCALAR

0x0008

ana köşegen aynı değerleri içerir

MATRIX_QUASI_TRIANGULAR

0x0010

olası yarı üçgensel matris

MATRIX_TRIANGLE_RIGHT_ALIGNED

0x0020

üst üçgensel kısım geniş matrisin sağ sınırına hizalanır

MATRIX_TRIANGLE_BOTTOM_ALIGNED

0x0040

alt üçgensel kısım yüksek matrisin alt sınırına hizalanır

Listelenen bayraklar (MATRIX_QUASI_TRIANGULAR hariç) matrislerin daha kompakt depolanmasını sağlar.

 

Örnek

   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);
 
 
   /*
   5950HSBLASTYPE_HSTYPE_MATRIX0x0011rows=10cols=10nnz=57lower_bandwidth=1upper_bandwidth=-1data_size=512
   info.flags :  MATRIX_UPPER  MATRIX_QUASI_TRIANGULAR
   */