Chapter 15. Matrix manipulation
120
list xlist = x1 x2 x3
matrix A = { xlist }
When you provide a named list, the data series are by default placed in columns, as is natural in an
econometric context: if you want them in rows, append the transpose symbol.
As a special case of constructing a matrixfrom a list of variables, you can say
matrix A = { dataset }
This builds a matrix using all the series in the current dataset, apart from the constant (variable 0).
When this dummy list is used, it must be the sole element in the matrix definition {...}. You can,
however, create a matrix that includes the constant along with all other variables using horizontal
concatenation (see below), as in
matrix A = {const}~{dataset}
By default, when you build a matrix from series that include missing values the data rows that
contain NAs are skipped. But you can modify this behavior via the command set skip_missing
off. In that case NAs are converted to NaN (“Not a Number”). In the IEEE floating-point stan-
dard, arithmetic operations involving NaN always produce NaN. Alternatively, you can take greater
control over the observations (data rows) that are included in the matrix using the “set” variable
matrix_mask, as in
set matrix_mask msk
wheremskisthe nameofa series. Subsequent commandsthat form matricesfrom seriesorlists will
include only observations for which msk has non-zero (and non-missing) values. You can remove
this mask via the command set matrix_mask null.
+
Names of matrices must satisfy the same requirements as names of gretl variables in general: the name
can be no longer than 31 characters, must start with a letter, and must be composed of nothing but letters,
numbers and the underscore character.
15.2 Empty matrices
The syntax
matrix A = {}
creates an empty matrix—a matrix with zero rows and zero columns.
The main purpose of the concept of an empty matrixis to enable the user to define a starting point
for subsequent concatenation operations. Forinstance,if X isan already defined matrixofany size,
the commands
matrix A = {}
matrix B = A ~ X
result in a matrix B identical to X.
From an algebraic point of view, one can make sense of the idea of an empty matrix in terms of
vector spaces: ifa matrixisan ordered set ofvectors, then A={} isthe empty set. Asa consequence,
operationsinvolvingaddition andmultiplicationsdon’thave any clearmeaning(arguably,they have
none at all), but operations involving the cardinality of this set (that is, the dimension of the space
spanned by A) are meaningful.
How to change pdf to powerpoint on - application Library tool:C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF in C#.net, ASP.NET MVC, WinForms, WPF
Online C# Tutorial for Creating PDF from Microsoft PowerPoint Presentation
www.rasteredge.com
How to change pdf to powerpoint on - application Library tool:VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to PDF in vb.net, ASP.NET MVC, WinForms, WPF
VB.NET Tutorial for Export PDF file from Microsoft Office PowerPoint
www.rasteredge.com
Chapter 15. Matrix manipulation
121
Function
Return value
Function
Return value
A’, transp(A)
A
rows(A)
0
cols(A)
0
rank(A)
0
det(A)
NA
ldet(A)
NA
tr(A)
NA
onenorm(A)
NA
infnorm(A)
NA
rcond(A)
NA
Table 15.1: Valid functions on an empty matrix, A
Legal operations on empty matrices are listed in Table15.1. (All other matrix operations gener-
ate an error when an empty matrix is given as an argument.) In line with the above interpreta-
tion, some matrix functions return an empty matrix under certain conditions: the functions diag,
vec, vech, unvech when the arguments is an empty matrix; the functions I, ones, zeros,
mnormal, muniform when one or more of the arguments is 0; and the function nullspace when
its argument has full column rank.
15.3 Selecting sub-matrices
You can select sub-matrices of a given matrix using the syntax
A[rows,cols]
where rows can take any of these forms:
1. empty
selects all rows
2. a single integer
selects the single specifiedrow
3. two integers separated by a colon
selects a range of rows
4. the name of a matrix
selects the specified rows
With regard to option 2, the integer value can be given numerically, as the name of an existing
scalar variable, or as an expression that evaluates to a scalar. With option 4, the index matrix given
in the rows field must be either p1 or 1p, and should contain integer values in the range 1 to
n, where n is the number of rows in the matrix from which the selection is to be made.
The cols specification works in the same way, mutatis mutandis. Here are some examples.
matrix B = A[1,]
matrix B = A[2:3,3:5]
matrix B = A[2,2]
matrix idx = { 1, 2, 6 }
matrix B = A[idx,]
The first example selects row1 from matrixA;the second selectsa 23 submatrix;the thirdselects
ascalar; and the fourth selects rows 1, 2, and 6 from matrixA.
If the matrix in question is n  1 or 1 m, it is OK to give just one index specifier and omit the
comma. For example, A[2] selects the second element of A if A is a vector. Otherwise the comma
is mandatory.
In addition there is a pre-defined index specification, diag, which selects the principal diagonal of
asquare matrix, as in B[diag], where B is square.
You can use selections of this sort on either the right-hand side of a matrix-generating formula or
the left. Here is an example of use ofa selection on the right, to extract a 22 submatrix B from a
33 matrixA:
application Library tool:Online Convert PowerPoint to PDF file. Best free online export
Online Powerpoint to PDF Converter. Download Free Trial. Then just wait until the conversion from Powerpoint to PDF is complete and download the file.
www.rasteredge.com
application Library tool:RasterEdge XDoc.PowerPoint for .NET - SDK for PowerPoint Document
Able to view and edit PowerPoint rapidly. Convert. Convert PowerPoint to PDF. Convert PowerPoint to HTML5. Convert PowerPoint to Tiff. Convert PowerPoint to Jpeg
www.rasteredge.com
Chapter 15. Matrix manipulation
122
matrix A = { 1, 2, 3; 4, 5, 6; 7, 8, 9 }
matrix B = A[1:2,2:3]
And here are examples of selection on the left. The secondline belowwrites a 22 identity matrix
into the bottom right corner of the 33 matrix A. The fourth line replaces the diagonal of A with
1s.
matrix A = { 1, 2, 3; 4, 5, 6; 7, 8, 9 }
matrix A[2:3,2:3] = I(2)
matrix d = { 1, 1, 1 }
matrix A[diag] = d
15.4 Matrix operators
The following binary operators are available for matrices:
+
addition
-
subtraction
*
ordinary matrixmultiplication
pre-multiplication by transpose
\
matrix “left division” (see below)
/
matrix “right division” (see below)
~
column-wise concatenation
|
row-wise concatenation
**
Kronecker product
=
test for equality
!=
test for inequality
In addition, the following operators (“dot” operators) apply on an element-by-element basis:
.+
.-
.*
./
.^
.=
.>
.<
.>=
.<=
.!=
Here are explanations of the less obvious cases.
For matrix addition and subtraction, in general the two matrices have to be ofthe same dimensions
but an exception to this rule is granted ifone of the operands isa 11 matrix or scalar. The scalar
is implicitly promoted to the status of a matrix of the correct dimensions, all of whose elements
are equal to the given scalar value. For example, if A is an m n matrix and k a scalar, then the
commands
matrix C = A + k
matrix D = A - k
both produce m n matrices, with elements c
ij
a
ij
k and d
ij
a
ij
k respectively.
By “pre-multiplication by transpose” we mean, for example, that
matrix C = X’Y
produces the product of X-transpose and Y. In effect, the expression X’Y is shorthand for X’*Y,
which is also valid. Consider, however, that in the special case X  Y, the two are not exactly
equivalent: the former expression uses a specialized, optimized algorithm which has the double
advantage of being more efficient computationally and of ensuring that the result will be free by
application Library tool:C# WinForms Viewer: Load, View, Convert, Annotate and Edit
to PDF; Convert PowerPoint to PDF; Convert Image to PDF; Convert Jpeg to PDF; Merge PDF Files; Split PDF Document; Remove Password from PDF; Change PDF Permission
www.rasteredge.com
application Library tool:How to C#: Overview of Using XDoc.PowerPoint
How to C#: Overview of Using XDoc.PowerPoint. Overview for How to Use XDoc.PowerPoint in C# .NET Programming Project. PowerPoint Conversion.
www.rasteredge.com
Chapter 15. Matrix manipulation
123
construction of machine precision artifacts that may render it numerically non-symmetric. This,
however, is unlikely to affect you unless your X matrix is rather large (at least several hundreds
rows/columns).
In matrix “left division”, the statement
matrix X = A \ B
is interpreted as a request to find the matrix X that solves AX  B. If B is a square matrix, this is
in principle equivalent to A 1B, which fails if A is singular; the numerical method employed here
is the LU decomposition. If A is a T k matrix with T > k, then X is the least-squares solution,
X  A
0
A
1
A
0
B, which fails if A
0
A is singular; the numerical method employed here is the QR
decomposition. Otherwise, the operation necessarily fails.
For matrix “right division”, as in X = A / B, X is the matrix that solves XB  A, in principle
equivalent to AB
1
.
In “dot” operations a binary operation is applied element by element; the result of this operation
is obvious if the matrices are of the same size. However, there are several other cases where such
operators may be applied. For example, if we write
matrix C = A .- B
then the result C depends on the dimensions of A and B. Let A be an m n matrix and let B be
pq; the result is as follows:
Case
Result
Dimensions match (m  p and n  q)
c
ij
a
ij
b
ij
Ais a column vector; rows match (m  p; n 1)
c
ij
a
i
b
ij
Bis a column vector; rows match (m p; q 1)
c
ij
a
ij
b
i
Ais a row vector; columns match (m  1; n q)
c
ij
a
j
b
ij
Bis a row vector; columns match (m p; q 1)
c
ij
a
ij
b
j
Ais a column vector; B is a row vector (n 1; p  1) c
ij
a
i
b
j
Ais a row vector; B is a column vector (m  1; q  1) c
ij
a
j
b
i
Ais a scalar (m 1 andn 1)
c
ij
a  b
ij
Bis a scalar (p 1 and q 1)
c
ij
a
ij
b
If none of the above conditions are satisfied the result is undefined and an error is flagged.
Note that this convention makes it unnecessary, in most cases, to use diagonal matrices to perform
transformations by means of ordinary matrix multiplication: if Y  XV, where V is diagonal, it is
computationally much more convenient to obtain Y via the instruction
matrix Y = X .* v
where v is a row vector containing the diagonal of V.
In column-wiseconcatenation ofan mn matrixA andan mp matrixB,the result is an mnp
matrix. That is,
matrix C = A ~ B
produces C 
h
A
B
i
.
Row-wise concatenation of an m n matrix A and an p n matrix B produces an m p  n
matrix. That is,
application Library tool:C# HTML5 Viewer: Load, View, Convert, Annotate and Edit PowerPoint
Such as load and view PowerPoint without Microsoft Office software installed, convert PowerPoint to PDF file, Tiff image and HTML file, as well as add
www.rasteredge.com
application Library tool:VB.NET PowerPoint: Read, Edit and Process PPTX File
create image on desired PowerPoint slide, merge/split PowerPoint file, change the order of How to convert PowerPoint to PDF, render PowerPoint to SVG
www.rasteredge.com
Chapter 15. Matrix manipulation
124
matrix C = A | B
produces C 
"
A
B
#
.
15.5 Matrix–scalar operators
For matrix A and scalar k, the operators shown in Table15.2 are available. (Addition and subtrac-
tion were discussed in section15.4 but we include them in the table for completeness.) In addition,
for square A and integer k 0, B = A^k produces a matrix B which is A raised to the power k.
Expression
Effect
matrix B = A * k
b
ij
ka
ij
matrix B = A / k
b
ij
a
ij
=k
matrix B = k / A
b
ij
k=a
ij
matrix B = A + k
b
ij
a
ij
k
matrix B = A - k
b
ij
a
ij
k
matrix B = k - A
b
ij
k a
ij
matrix B = A % k
b
ij
a
ij
modulo k
Table 15.2: Matrix–scalar operators
15.6 Matrix functions
Most of the gretl functions available for scalars and series also apply to matrices in an element-by-
element fashion,and assuch their behavior should be pretty obvious. This is the case for functions
such as log, exp, sin, etc. These functions have the effects documented in relation to the genr
command. For example, if a matrixA is already defined, then
matrix B = sqrt(A)
generates a matrix such that b
ij
p
a
ij
.All such functions require a single matrix as argument, or
an expression which evaluates to a single matrix.1
In this section, we review some aspects ofgenr functions that apply specifically to matrices. A full
account of each function is available in the Gretl Command Reference.
Matrix reshaping
In addition to the methods discussed in sections 15.1 and15.3, a matrix can also be created by
re-arranging the elements of a pre-existing matrix. This is accomplished via the mshape function.
It takes three arguments: the input matrix, A, and the rows and columns of the target matrix, r
and c respectively. Elements are read from A and written to the target in column-major order. IfA
contains fewer elements than n  r c, they are repeated cyclically; if A has more elements, only
the first n are used.
For example:
matrix a = mnormal(2,3)
a
1
Note thatto find the “matrix square root” you need the choleskyfunction (see below); moreover, the exp function
computes the exponential element by element,andtherefore doesnot return thematrix exponential unlessthematrix is
diagonal—togetthe matrix exponential, use mexp.
application Library tool:VB.NET PDF Password Library: add, remove, edit PDF file password
Add password to PDF. Change PDF original password. Remove password from PDF. Set PDF security level. VB: Change and Update PDF Document Password.
www.rasteredge.com
application Library tool:C# powerpoint - Convert PowerPoint to PDF in C#.NET
C# PowerPoint - Convert PowerPoint to PDF in C#.NET. Online C# Tutorial for Converting PowerPoint to PDF (.pdf) Document. PowerPoint to PDF Conversion Overview.
www.rasteredge.com
Chapter 15. Matrix manipulation
125
Creation and I/O
colnames
diag
diagcat
I
lower
mnormal
mread
muniform
ones
rownames
seq
unvech
upper
vec
vech
zeros
Shape/size/arrangement
cols
dsort
mreverse
mshape
msortby
rows
selifc
selifr
sort
trimr
Matrix algebra
cdiv
cholesky
cmult
det
eigengen
eigensym
eigsolve
fft
ffti
ginv
hdprod
infnorm
inv
invpd
ldet
mexp
nullspace onenorm
polroots
psdroot
qform
qrdecomp
rank
rcond
svd
toepsolv
tr
transp
varsimul
Statistics/transformations
aggregate cdemean
corr
corrgm
cov
fcstats
ghk
halton
imaxc
imaxr
iminc
iminr
irf
iwishart
kdensity
kpsscrit
maxc
maxr
mcorr
mcov
mcovg
meanc
meanr
minc
minr
mlag
mols
mpols
mrls
mxtab
pergm
princomp
prodc
prodr
quadtable quantile
ranking
resample
sdc
sumc
sumr
uniq
values
Datautilities
isconst
isdummy
mwrite
ok
pexpand
pshrink
replace
Filters
filter
kfilter
ksimul
ksmooth
lrvar
Numerical methods
BFGSmax
fdjac
NRmax
simann
Strings
colname
Transformations
chowlin
cum
lincomb
Table 15.3: Matrix functions by category
Chapter 15. Matrix manipulation
126
matrix b = mshape(a,3,1)
b
matrix b = mshape(a,5,2)
b
produces
?
a
a
1.2323
0.99714
-0.39078
0.54363
0.43928
-0.48467
?
matrix b = mshape(a,3,1)
Generated matrix b
?
b
b
1.2323
0.54363
0.99714
?
matrix b = mshape(a,5,2)
Replaced matrix b
?
b
b
1.2323
-0.48467
0.54363
1.2323
0.99714
0.54363
0.43928
0.99714
-0.39078
0.43928
Complex multiplication and division
Gretl has no native provision for complex numbers. However, basic operations can be performed
on vectors of complex numbers by using the convention that a vector of n complex numbers is
represented as a n  2 matrix, where the first column contains the real part and the second the
imaginary part.
Addition and subtraction are trivial; the functions cmult and cdiv compute the complex product
and division, respectively, of two input matrices, A and B, representing complex numbers. These
matrices must have the same number of rows, n, and either one or two columns. The first column
contains the real part and the second (if present) the imaginary part. The return value is an n 2
matrix, or, if the result has no imaginary part, an n-vector.
For example, suppose you have z
1
1 2i;3 4i
0
and z
2
1;i
0
:
? z1 = {1,2;3,4}
z1 = {1,2;3,4}
Generated matrix z1
? z2 = I(2)
z2 = I(2)
Generated matrix z2
? conj_z1 = z1 .* {1,-1}
conj_z1 = z1 .* {1,-1}
Generated matrix conj_z1
? eval cmult(z1,z2)
eval cmult(z1,z2)
Chapter 15. Matrix manipulation
127
1
2
-4
3
? eval cmult(z1,conj_z1)
eval cmult(z1,conj_z1)
5
25
Multiple returns and the null keyword
Some functions take one or more matrices as arguments and compute one or more matrices; these
are:
eigensym
Eigen-analysis of symmetric matrix
eigengen
Eigen-analysis of general matrix
mols
Matrix OLS
qrdecomp
QR decomposition
svd
Singular value decomposition (SVD)
The general rule is: the “main” result of the function is always returned as the result proper.
Auxiliary returns, if needed, are retrieved using pre-existing matrices, which are passed to the
function as pointers (see13.4). If such values are not needed, the pointer may be substituted with
the keyword null.
The syntaxfor qrdecomp, eigensym and eigengen is of the form
matrix B = func(A, &C)
The first argument,A,representsthe input data,that is, the matrixwhose decomposition oranalysis
is required. The second argument must be either the name of an existing matrix preceded by & (to
indicate the “address” of the matrix in question), in which case an auxiliary result is written to that
matrix, or the keyword null, in which case the auxiliary result is not produced, or is discarded.
In case a non-null second argument is given, the specified matrix will be over-written with the
auxiliary result. (It is not required that the existing matrix be ofthe right dimensions to receive the
result.)
The function eigensym computes the eigenvalues, and optionally the right eigenvectors, of a sym-
metric n n matrix. The eigenvalues are returned directly in a column vector of length n; if the
eigenvectors are required, they are returned in an nn matrix. For example:
matrix V
matrix E = eigensym(M, &V)
matrix E = eigensym(M, null)
In the first case E holds the eigenvalues of M and V holds the eigenvectors. In the second, E holds
the eigenvalues but the eigenvectors are not computed.
The function eigengen computes the eigenvalues, and optionally the eigenvectors, of a general
nn matrix. The eigenvalues are returneddirectly in an n2 matrix, the first column holding the
real components and the second column the imaginary components.
If the eigenvectors are required (that is, if the second argument to eigengen is not null), they
are returned in an n  n matrix. The column arrangement of this matrix is somewhat non-trivial:
the eigenvectors are stored in the same order as the eigenvalues, but the real eigenvectors occupy
one column, whereas complex eigenvectors take two (the real part comes first); the total num-
ber of columns is still n, because the conjugate eigenvector is skipped. Example15.1 provides a
(hopefully) clarifying example (see also subsection15.6).
Chapter 15. Matrix manipulation
128
Example 15.1: Complex eigenvalues and eigenvectors
set seed 34756
matrix v
A = mnormal(3,3)
/* do the eigen-analysis */
l = eigengen(A,&v)
/* eigenvalue 1 is real, 2 and 3 are complex conjugates */
print l
print v
/*
column 1 contains the first eigenvector (real)
*/
B = A*v[,1]
c = l[1,1] * v[,1]
/* B should equal c */
print B
print c
/*
columns 2:3 contain the real and imaginary parts
of eigenvector 2
*/
B = A*v[,2:3]
c = cmult(ones(3,1)*(l[2,]),v[,2:3])
/* B should equal c */
print B
print c
Chapter 15. Matrix manipulation
129
The qrdecomp function computes the QR decomposition of an m n matrix A: A  QR, where Q
is an mn orthogonal matrix and R is an nn upper triangular matrix. The matrix Q is returned
directly, while R can be retrieved via the second argument. Here are two examples:
matrix R
matrix Q = qrdecomp(M, &R)
matrix Q = qrdecomp(M, null)
In the first example, the triangular R is saved as R; in the second, R is discarded. The first line
above shows an example of a “simple declaration” of a matrix: R is declared to be a matrix variable
but is not given any explicit value. In this case the variable is initialized as a 1  1 matrix whose
single element equals zero.
The syntaxfor svd is
matrix B = func(A, &C, &D)
The function svd computes all or part ofthe singular value decomposition ofthe real mn matrix
A. Let k minm;n. The decomposition is
A UÖV
0
where U is an mk orthogonal matrix, Ö is an k k diagonal matrix, and V is an kn orthogonal
matrix.
2
The diagonal elements of Ö are the singular values of A; they are real and non-negative,
and are returnedin descendingorder. The first k columnsofU and V are the left and right singular
vectors of A.
The svd function returns the singular values, in a vector of length k. The left and/or right singu-
lar vectors may be obtained by supplying non-null values for the second and/or third arguments
respectively. For example:
matrix s = svd(A, &U, &V)
matrix s = svd(A, null, null)
matrix s = svd(A, null, &V)
In the first case both sets of singular vectors are obtained, in the second case only the singular
values are obtained; andin the third, the right singular vectors are obtained but U isnot computed.
Please note: when the third argument is non-null, it is actually V0 that is provided. To reconstitute
the original matrix from its SVD, one can do:
matrix s = svd(A, &U, &V)
matrix B = (U.*s)*V
Finally, the syntax for mols is
matrix B = mols(Y, X, &U)
This function returns the OLS estimates obtained by regressing the T  n matrix Y on the T k
matrix X, that is, a k  n matrix holding X
0
X
1
X
0
Y. The Cholesky decomposition is used. The
matrix U, if not null, is used to store the residuals.
Reading and writing matrices from/to text files
The two functions mread andmwrite can be usedfor basicmatrixinput/output. This can be useful
to enable gretl to exchange data with other programs.
2
This is notthe only definition of the SVD: some writersdefine U as mm, Ö as mn (with k non-zero diagonal
elements)and V asn n.
Documents you may be interested
Documents you may be interested