\section{MATRIX Matrix Definitions}

\subsection{Usage}

The matrix is the basic datatype of FreeMat.  Matrices can be
defined using the following syntax
\begin{verbatim}
  A = [row_def1;row_def2;...,row_defN]
\end{verbatim}
where each row consists of one or more elements, seperated by
commas
\begin{verbatim}
  row_defi = element_i1,element_i2,...,element_iM
\end{verbatim}
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 \verb|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).
\subsection{Examples}

Here is an example of a matrix of \verb|int32| elements (note that
untyped integer constants default to type \verb|int32|).
\begin{verbatim}
--> A = [1,2;5,8]
A = 
  <int32>  - size: [2 2]
 
Columns 1 to 2
 1  2  
 5  8  

\end{verbatim}
Now we define a new matrix by adding a column to the right of
\verb|A|, and using float constants.
\begin{verbatim}
--> B = [A,[3.2f;5.1f]]
B = 
  <float>  - size: [2 3]
 
Columns 1 to 3
 1.0  2.0  3.2  
 5.0  8.0  5.1  

\end{verbatim}
Next, we add extend \verb|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 \verb|double|
\begin{verbatim}
--> C = [B;5.2,1.0,0.0]
C = 
  <double>  - size: [3 3]
 
Columns 1 to 3
 1.000000000000000  2.000000000000000  3.200000047683716  
 5.000000000000000  8.000000000000000  5.099999904632568  
 5.200000000000000  1.000000000000000  0.000000000000000  

\end{verbatim}
If we instead add a row of \verb|complex| values (recall that \verb|i| is
a \verb|complex| constant, not a \verb|dcomplex| constant)
\begin{verbatim}
--> D = [B;2.0f+3.0f*i,i,0.0f]
D = 
  <complex>  - size: [3 3]
 
Columns 1 to 3
 1.0+0.0 i  2.0+0.0 i  3.2+0.0 i  
 5.0+0.0 i  8.0+0.0 i  5.1+0.0 i  
 2.0+3.0 i  0.0+1.0 i  0.0+0.0 i  

\end{verbatim}
Likewise, but using \verb|dcomplex| constants
\begin{verbatim}
--> E = [B;2.0+3.0*i,i,0.0]
E = 
  <dcomplex>  - size: [3 3]
 
Columns 1 to 2
 1.000000000000000+0.000000000000000i  2.000000000000000+0.000000000000000i  
 5.000000000000000+0.000000000000000i  8.000000000000000+0.000000000000000i  
 2.000000000000000+3.000000000000000i  0.000000000000000+1.000000000000000i  
 
Columns 3 to 3
 3.200000047683716+0.000000000000000i  
 5.099999904632568+0.000000000000000i  
 0.000000000000000+0.000000000000000i  

\end{verbatim}
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.
\begin{verbatim}
--> F = ['hello';'there']
F = 
  <string>  - size: [2 5]
 hello
 there

\end{verbatim}
