MATRIX Matrix Definitions

Section: Variables and Arrays

Usage

The matrix is the basic datatype of FreeMat. Matrices can be defined using the following syntax
  A = [row_def1;row_def2;...,row_defN]

where each row consists of one or more elements, seperated by commas

  row_defi = element_i1,element_i2,...,element_iM

Each element can either be a scalar value or another matrix, provided that the resulting matrix definition makes sense. In general this means that all of the elements belonging to a row have the same number of rows themselves, and that all of the row definitions have the same number of columns. Matrices are actually special cases of N-dimensional arrays where N<=2. Higher dimensional arrays cannot be constructed using the bracket notation described above. The type of a matrix defined in this way (using the bracket notation) is determined by examining the types of the elements. The resulting type is chosen so no information is lost on any of the elements (or equivalently, by choosing the highest order type from those present in the elements).

Examples

Here is an example of a matrix of int32 elements (note that untyped integer constants default to type int32).
--> A = [1,2;5,8]

A = 
 1 2 
 5 8 

Now we define a new matrix by adding a column to the right of A, and using float constants.

--> B = [A,[3.2f;5.1f]]

B = 
    1.0000    2.0000    3.2000 
    5.0000    8.0000    5.1000 

Next, we add extend B by adding a row at the bottom. Note how the use of an untyped floating point constant forces the result to be of type double

--> C = [B;5.2,1.0,0.0]

C = 
    1.0000    2.0000    3.2000 
    5.0000    8.0000    5.1000 
    5.2000    1.0000         0 

If we instead add a row of complex values (recall that i is a complex constant, not a dcomplex constant)

--> D = [B;2.0f+3.0f*i,i,0.0f]

D = 
   1.0000 +  0.0000i   2.0000 +  0.0000i   3.2000 +  0.0000i 
   5.0000 +  0.0000i   8.0000 +  0.0000i   5.1000 +  0.0000i 
   2.0000 +  3.0000i   0.0000 +  1.0000i        0           

Likewise, but using dcomplex constants

--> E = [B;2.0+3.0*i,i,0.0]

E = 
   1.0000 +  0.0000i   2.0000 +  0.0000i   3.2000 +  0.0000i 
   5.0000 +  0.0000i   8.0000 +  0.0000i   5.1000 +  0.0000i 
   2.0000 +  3.0000i   0.0000 +  1.0000i        0           

Finally, in FreeMat, you can construct matrices with strings as contents, but you have to make sure that if the matrix has more than one row, that all the strings have the same length.

--> F = ['hello';'there']

F = 
hello
there