# MatlabR.dvi Hiebeler Matlab R

User Manual: Hiebeler-matlabR

Open the PDF directly: View PDF .

Page Count: 52

1

MATLAB R

°/RReference

May 25, 2010

David Hiebeler

Dept. of Mathematics and Statistics

University of Maine

Orono, ME 04469-5752

http://www.math.umaine.edu/~hiebeler

I wrote the ﬁrst version of this reference during the Spring 2007 semester, as I learned Rwhile

teaching my Modeling & Simulation course at the University of Maine. The course covers population

and epidemiological modeling, including deterministic and stochastic models in discrete and continuous

time, along with spatial models. Half of the class meetings are in a regular classroom, and half are in

a computer lab where students work through modeling & simulation exercises. When I taught earlier

versions of the course, it was based on Matlab only. In Spring 2007, some biology graduate students in

the class who had learned Rin statistics courses asked if they could use Rin my class as well, and I said

yes. My colleague Bill Halteman was a great help as I frantically learned Rto stay ahead of the class.

As I went, every time I learned how to do something in Rfor the course, I added it to this reference, so

that I wouldn’t forget it later. Some items took a huge amount of time searching for a simple way to do

what I wanted, but at the end of the semester, I was pleasantly surprised that almost everything I do

in Matlab had an equivalent in R. I was also inspired to do this after seeing the “Rfor Octave Users”

reference written by Robin Hankin. I’ve continued to add to the document, with many additions based

on topics that came up while teaching courses on Advanced Linear Algebra and Numerical Analysis.

This reference is organized into general categories. There is also a Matlab index and an Rindex at

the end, which should make it easy to look up a command you know in one of the languages and learn

how to do it in the other (or if you’re trying to read code in whichever language is unfamiliar to you,

allow you to translate back to the one you are more familiar with). The index entries refer to the item

numbers in the ﬁrst column of the reference document, rather than page numbers.

Any corrections, suggested improvements, or even just notiﬁcation that the reference has been useful

are appreciated. I hope all the time I spent on this will prove useful for others in addition to myself and

my students. Note that sometimes I don’t necessarily do things in what you may consider the “best” way

in a particular language. I often tried to do things in a similar way in both languages, and where possible

I’ve avoided the use of Matlab toolboxes or Rpackages which are not part of the core distributions.

But if you believe you have a “better” way (either simpler, or more computationally eﬃcient) to do

something, feel free to let me know.

Acknowledgements: Thanks to Alan Cobo-Lewis and Isaac Michaud for correcting some errors; and

Robert Bryce, Thomas Clerc, Richard Cotton, Stephen Eglen, Andreas Handel, Niels Richard Hansen,

David Khabie-Zeitoune, Michael Kiparsky, Andy Moody, Ben Morin, Lee Pang, Manas A. Pathak, Rachel

Rier, Rune Schjellerup Philosof, and Corey Yanofsky for contributions.

Permission is granted to make and distribute verbatim copies of this manual provided this permission

notice is preserved on all copies.

Permission is granted to copy and distribute modiﬁed versions of this manual under the conditions

for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a

permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, un-

der the above conditions for modiﬁed versions, except that this permission notice may be stated in a

translation approved by the Free Software Foundation.

Copyright c

°2007–2010 David Hiebeler

D. Hiebeler, Matlab /RReference 2

Contents

1 Help 3

2 Entering/building/indexing matrices 3

2.1 Cell arrays and lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.2 Structs and data frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3 Computations 6

3.1 Basic computations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3.2 Complex numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3.3 Matrix/vector computations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.4 Root-ﬁnding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.5 Function optimization/minimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.6 Numerical integration / quadrature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.7 Curve ﬁtting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4 Conditionals, control structure, loops 17

5 Functions, ODEs 21

6 Probability and random values 23

7 Graphics 27

7.1 Various types of plotting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

7.2 Printing/saving graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

7.3 Animating cellular automata / lattice simulations . . . . . . . . . . . . . . . . . . . . . . . 36

8 Working with ﬁles 37

9 Miscellaneous 38

9.1 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

9.2 Strings and Misc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

10 Spatial Modeling 42

Index of MATLAB commands and concepts 43

Index of Rcommands and concepts 48

D. Hiebeler, Matlab /RReference 3

1 Help

No. Description Matlab R

1 Show help for a function (e.g.

sqrt)

help sqrt, or helpwin sqrt to see

it in a separate window

help(sqrt) or ?sqrt

2 Show help for a built-in key-

word (e.g. for)

help for help(’for’) or ?’for’

3 General list of many help top-

ics

help library() to see available libraries,

or library(help=’base’) for very

long list of stuﬀ in base package which

you can see help for

4 Explore main documentation

in browser

doc or helpbrowser (previously it

was helpdesk, which is now being

phased out)

help.start()

5 Search documentation for

keyword or partial keyword

(e.g. functions which refer to

“binomial”)

lookfor binomial help.search(’binomial’)

2 Entering/building/indexing matrices

No. Description Matlab R

6 Enter a row vector ~v =

£1 2 3 4 ¤

v=[1 2 3 4] v=c(1,2,3,4) or alternatively

v=scan() then enter “1 2 3 4” and

press Enter twice (the blank line

terminates input)

7 Enter a column vector

1

2

3

4

[1; 2; 3; 4] c(1,2,3,4)

(Rdoes not distinguish between row

and column vectors.)

8 Enter a matrix ·1 2 3

4 5 6 ¸[1 2 3 ; 4 5 6] To enter values by row:

matrix(c(1,2,3,4,5,6), nrow=2,

byrow=TRUE) To enter values by

column: matrix(c(1,4,2,5,3,6),

nrow=2)

9 Access an element of vector vv(3) v[3]

10 Access an element of matrix

A

A(2,3) A[2,3]

11 Access an element of matrix

Ausing a single index: in-

dices count down the ﬁrst col-

umn, then down the second

column, etc.

A(5) A[5]

12 Build the vector [2 3 4 5 6 7] 2:7 2:7

13 Build the vector [7 6 5 4 3 2] 7:-1:2 7:2

14 Build the vector [2 5 8 11 14] 2:3:14 seq(2,14,3)

D. Hiebeler, Matlab /RReference 4

No. Description Matlab R

15 Build a vector containing

nequally-spaced values be-

tween aand binclusive

linspace(a,b,n) seq(a,b,length.out=n) or just

seq(a,b,len=n)

16 Build a vector containing

nlogarithmically equally-

spaced values between 10a

and 10binclusive

logspace(a,b,n) 10^seq(a,b,len=n)

17 Build a vector of length k

containing all zeros

zeros(k,1) (for a column vector) or

zeros(1,k) (for a row vector)

rep(0,k)

18 Build a vector of length k

containing the value jin all

positions

j*ones(k,1) (for a column vector)

or j*ones(1,k) (for a row vector)

rep(j,k)

19 Build an m×nmatrix of zeros zeros(m,n) matrix(0,nrow=m,ncol=n) or just

matrix(0,m,n)

20 Build an m×nmatrix con-

taining jin all positions

j*ones(m,n) matrix(j,nrow=m,ncol=n) or just

matrix(j,m,n)

21 n×nidentity matrix Ineye(n) diag(n)

22 Build diagonal matrix Aus-

ing elements of vector vas di-

agonal entries

diag(v) diag(v,nrow=length(v)) (Note: if

you are sure the length of vector vis 2

or more, you can simply say diag(v).)

23 Extract diagonal elements of

matrix A

v=diag(A) v=diag(A)

24 “Glue” two matrices a1 and

a2 (with the same number of

rows) side-by-side

[a1 a2] cbind(a1,a2)

25 “Stack” two matrices a1 and

a2 (with the same number of

columns) on top of each other

[a1; a2] rbind(a1,a2)

26 Given vectors xand yof

lengths mand nrespectively,

build n×mmatrices Xwhose

rows are copies of xand Y

whose columns are copies of

y

[X,Y]=meshgrid(x,y)

m=length(x); n=length(y);

X=matrix(rep(x,each=n),nrow=n);

Y=matrix(rep(y,m),nrow=n)

27 Reverse the order of elements

in vector v

v(end:-1:1) rev(v)

28 Column 2 of matrix AA(:,2) A[,2] Note: that gives the result as a

vector. To make the result a m×1 ma-

trix instead, do A[,2,drop=FALSE]

29 Row 7 of matrix AA(7,:) A[7,] Note: that gives the result as a

vector. To make the result a 1×nma-

trix instead, do A[7,,drop=FALSE]

30 All elements of Aas a vector,

column-by-column

A(:) (gives a column vector) c(A)

31 Rows 2–4, columns 6–10 of A

(this is a 3 ×5 matrix)

A(2:4,6:10) A[2:4,6:10]

32 A 3 ×2 matrix consisting of

rows 7, 7, and 6 and columns

2 and 1 of A(in that order)

A([7 7 6], [2 1]) A[c(7,7,6),c(2,1)]

33 Circularly shift the rows of

matrix Adown by s1ele-

ments, and right by s2ele-

ments

circshift(A, [s1 s2]) No simple way, but modulo arithmetic

on indices will work: m=dim(A)[1];

n=dim(A)[2]; A[(1:m-s1-1)%%m+1,

(1:n-s2-1)%%n+1]

D. Hiebeler, Matlab /RReference 5

No. Description Matlab R

34 Flip the order of elements in

each row of matrix A

fliplr(A) t(apply(A,1,rev))

35 Flip the order of elements in

each column of matrix A

flipud(A) apply(A,2,rev)

36 Given a single index ind into

an m×nmatrix A, compute

the row rand column cof

that position (also works if

ind is a vector)

[r,c] = ind2sub(size(A), ind) r = ((ind-1) %% m) + 1

c = floor((ind-1) / m) + 1

37 Given the row rand column

cof an element of an m×n

matrix A, compute the single

index ind which can be used

to access that element of A

(also works if rand care vec-

tors)

ind = sub2ind(size(A), r, c) ind = (c-1)*m + r

38 Given equal-sized vectors r

and c(each of length k), set

elements in rows (given by r)

and columns (given by c) of

matrix Aequal to 12. That

is, kelements of Awill be

modiﬁed.

inds = sub2ind(size(A),r,c);

A(inds) = 12;

inds = cbind(r,c)

A[inds] = 12

39 Truncate vector v, keeping

only the ﬁrst 10 elements

v = v(1:10) v = v[1:10], or length(v) = 10

also works

40 Extract elements of vector v

from position ato the end

v(a:end) v[a:length(v)]

41 All but the kth element of

vector v

v([1:(k-1) (k+1):end]) v[-k]

42 All but the jth and kth ele-

ments of vector v

No simple way? Generalize the pre-

vious item

v[c(-j,-k)]

43 Reshape matrix A, making it

an m×nmatrix with ele-

ments taken columnwise from

the original A(which must

have mn elements)

A = reshape(A,m,n) dim(A) = c(m,n)

44 Extract the lower-triangular

portion of matrix A

L = tril(A) L = A; L[upper.tri(L)]=0

45 Extract the upper-triangular

portion of matrix A

U = triu(A) U = A; U[lower.tri(U)]=0

46 Enter n×nHilbert matrix H

where Hij = 1/(i+j−1)

hilb(n) Hilbert(n), but this is part of the

Matrix package which you’ll need to

install (see item 331 for how to in-

stall/load packages).

47 Enter an n-dimensional array,

e.g. a 3 ×4×2 array with the

values 1 through 24

reshape(1:24, 3, 4, 2) or

reshape(1:24, [3 4 2])

array(1:24, c(3,4,2)) (Note that

amatrix is 2-D, i.e. rows and

columns, while an array is more gen-

erally N-D)

D. Hiebeler, Matlab /RReference 6

2.1 Cell arrays and lists

No. Description Matlab R

48 Build a vector vof length n,

capable of containing diﬀer-

ent data types in diﬀerent el-

ements (called a cell array in

Matlab, and a list in R)

v = cell(1,n) In general,

cell(m,n) makes an m×ncell

array. Then you can do e.g.:

v{1} = 12

v{2} = ’hi there’

v{3} = rand(3)

v = vector(’list’,n) Then you

can do e.g.:

v[[1]] = 12

v[[2]] = ’hi there’

v[[3]] = matrix(runif(9),3)

49 Extract the ith element of a

cell/list vector vw = v{i}

If you use regular indexing, i.e. w

= v(i), then wwill be a 1 ×1 cell

matrix containing the contents of the

ith element of v.

w = v[[i]]

If you use regular indexing, i.e. w =

v[i], then wwill be a list of length 1

containing the contents of the ith ele-

ment of v.

50 Set the name of the ith ele-

ment in a list.

(Matlab does not have names asso-

ciated with elements of cell arrays.)

names(v)[3] = ’myrandmatrix’

Use names(v) to see all names, and

names(v)=NULL to clear all names.

2.2 Structs and data frames

No. Description Matlab R

51 Create a matrix-like object

with diﬀerent named columns

(a struct in Matlab, or a

data frame in R)

avals=2*ones(1,6);

yvals=6:-1:1; v=[1 5 3 2 3 7];

d=struct(’a’,avals,

’yy’, yyvals, ’fac’, v);

v=c(1,5,3,2,3,7); d=data.frame(

cbind(a=2, yy=6:1), v)

Note that I (surprisingly) don’t use Rfor statistics, and therefore have very little experience with data

frames (and also very little with Matlab structs). I will try to add more to this section later on.

3 Computations

3.1 Basic computations

No. Description Matlab R

52 a+b,a−b,ab,a/b a+b,a-b,a*b,a/b a+b,a-b,a*b,a/b

53 √asqrt(a) sqrt(a)

54 aba^b a^b

55 |a|(note: for complex ar-

guments, this computes the

modulus)

abs(a) abs(a)

56 eaexp(a) exp(a)

57 ln(a)log(a) log(a)

58 log2(a), log10(a)log2(a),log10(a) log2(a),log10(a)

59 sin(a), cos(a), tan(a)sin(a),cos(a),tan(a) sin(a),cos(a),tan(a)

60 sin−1(a), cos−1(a), tan−1(a)asin(a),acos(a),atan(a) asin(a),acos(a),atan(a)

61 sinh(a), cosh(a), tanh(a)sinh(a),cosh(a),tanh(a) sinh(a),cosh(a),tanh(a)

62 sinh−1(a), cosh−1(a),

tanh−1(a)

asinh(a),acosh(a),atanh(a) asinh(a),acosh(a),atanh(a)

D. Hiebeler, Matlab /RReference 7

No. Description Matlab R

63 nMOD k(modulo arith-

metic)

mod(n,k) n %% k

64 Round to nearest integer round(x) round(x) (Note: Ruses IEC 60559

standard, rounding 5 to the even digit

— so e.g. round(0.5) gives 0, not 1.)

65 Round down to next lowest

integer

floor(x) floor(x)

66 Round up to next largest in-

teger

ceil(x) ceiling(x)

67 Sign of x(+1, 0, or -1) sign(x) (Note: for complex values,

this computes x/abs(x).)

sign(x) (Does not work with com-

plex values)

68 Error function erf(x) =

(2/√π)Rx

0e−t2dt

erf(x) 2*pnorm(x*sqrt(2))-1

69 Complementary er-

ror function cerf(x) =

(2/√π)R∞

xe−t2dt = 1-erf(x)

erfc(x) 2*pnorm(x*sqrt(2),lower=FALSE)

70 Inverse error function erfinv(x) qnorm((1+x)/2)/sqrt(2)

71 Inverse complementary error

function

erfcinv(x) qnorm(x/2,lower=FALSE)/sqrt(2)

72 Binomial coeﬃcient

µn

k¶=n!/(n!(n−k)!)

nchoosek(n,k) choose(n,k)

Note: the various functions above (logarithm, exponential, trig, abs, and rounding functions) all work

with vectors and matrices, applying the function to each element, as well as with scalars.

3.2 Complex numbers

No. Description Matlab R

73 Enter a complex number 1+2i 1+2i

74 Modulus (magnitude) abs(z) abs(z) or Mod(z)

75 Argument (angle) angle(z) Arg(z)

76 Complex conjugate conj(z) Conj(z)

77 Real part of zreal(z) Re(z)

78 Imaginary part of zimag(z) Im(z)

D. Hiebeler, Matlab /RReference 8

3.3 Matrix/vector computations

No. Description Matlab R

79 Vector dot product ~x ·~y =

~xT~y

dot(x,y) sum(x*y)

80 Vector cross product ~x ×~y cross(x,y) Not in base R, but e.g. the xprod

function from the RSEIS package will

do it (see item 331 for how to in-

stall/load packages)

81 Matrix multiplication AB A * B A %*% B

82 Element-by-element multipli-

cation of Aand B

A .* B A * B

83 Transpose of a matrix, ATA’ (This is actually the complex con-

jugate (i.e. Hermitian) transpose;

use A.’ for the non-conjugate trans-

pose if you like; they are equivalent

for real matrices.)

t(A) for transpose, or Conj(t(A)) for

conjugate (Hermitian) transpose

84 Solve A~x =~

bA\b Warning: if there is no solution,

Matlab gives you a least-squares

“best ﬁt.” If there are many solu-

tions, Matlab just gives you one of

them.

solve(A,b) Warning: this only works

with square invertible matrices.

85 Reduced echelon form of Arref(A) Rdoes not have a function to do this

86 Determinant of Adet(A) det(A)

87 Inverse of Ainv(A) solve(A)

88 Trace of Atrace(A) sum(diag(A))

89 Compute AB−1A/B A %*% solve(B)

90 Element-by-element division

of Aand B

A ./ B A / B

91 Compute A−1BA\B solve(A,B)

92 Square the matrix AA^2 A %*% A

93 Raise matrix Ato the kth

power

A^k (No easy way to do this in R

other than repeated multiplication

A %*% A %*% A...)

94 Raise each element of Ato

the kth power

A.^k A^k

95 Rank of matrix Arank(A) qr(A)$rank

96 Set wto be a vector of eigen-

values of A, and Va matrix

containing the corresponding

eigenvectors

[V,D]=eig(A) and then w=diag(D)

since Matlab returns the eigenval-

ues on the diagonal of D

tmp=eigen(A); w=tmp$values;

V=tmp$vectors

97 Permuted LU factorization of

a matrix

[L,U,P]=lu(A) then the matrices

satisfy P A =LU . Note that this

works even with non-square matrices

tmp=expand(lu(Matrix(A)));

L=tmp$L; U=tmp$U; P=tmp$P then

the matrices satisfy A=P LU, i.e.

P−1A=LU. Note that the lu and

expand functions are part of the Ma-

trix package (see item 331 for how to

install/load packages). Also note that

this doesn’t seem to work correctly

with non-square matrices. L,U, and

Pwill be of class Matrix rather than

class matrix; to make them the latter,

instead do L=as.matrix(tmp$L),

U=as.matrix(tmp$U), and

P=as.matrix(tmp$P) above.

D. Hiebeler, Matlab /RReference 9

No. Description Matlab R

98 Singular-value decomposi-

tion: given m×nmatrix

Awith rank r, ﬁnd m×r

matrix Pwith orthonormal

columns, diagonal r×r

matrix S, and r×nmatrix

QTwith orthonormal rows

so that P SQT=A

[P,S,Q]=svd(A,’econ’) tmp=svd(A); U=tmp$u; V=tmp$v;

S=diag(tmp$d)

99 Schur decomposi-

tion of square matrix,

A=QT QH=QT Q−1where

Qis unitary (i.e. QHQ=I)

and Tis upper triangular;

QH=QTis the Hermitian

(conjugate) transpose

[Q,T]=schur(A) tmp=Schur(Matrix(A)); T=tmp@T;

Q=tmp@Q Note that Schur is part of

the Matrix package (see item 331 for

how to install/load packages). Tand

Qwill be of class Matrix rather than

class matrix; to make them the latter,

instead do T=as.matrix(tmp@T) and

Q=as.matrix(tmp@Q) above.

100 Cholesky factorization of a

square, symmetric, positive

deﬁnite matrix A=RTR,

where Ris upper-triangular

R = chol(A) R = chol(A) Note that chol is part

of the Matrix package (see item 331

for how to install/load packages).

101 QR factorization of matrix A,

where Qis orthogonal (sat-

isfying QQT=I) and Ris

upper-triangular

[Q,R]=qr(A) satisfying QR =A, or

[Q,R,E]=qr(A) to do permuted QR

factorization satisfying AE =QR

z=qr(A); Q=qr.Q(z); R=qr.R(z);

E=diag(n)[,z$pivot] (where nis

the number of columns in A) gives

permuted QR factorization satisfying

AE =QR

102 Vector norms norm(v,1) for 1-norm k~vk1,

norm(v,2) for Euclidean norm

k~vk2,norm(v,inf) for inﬁnity-norm

k~vk∞, and norm(v,p) for p-norm

k~vkp= (P|vi|p)1/p

Rdoes not have a norm func-

tion for vectors; only one for

matrices. But the following will

work: norm(matrix(v),’1’) for

1-norm k~vk1,norm(matrix(v),’i’)

for inﬁnity-norm k~vk∞, and

sum(abs(v)^p)^(1/p) for p-norm

k~vkp= (P|vi|p)1/p

103 Matrix norms norm(A,1) for 1-norm kAk1,

norm(A) for 2-norm kAk2,

norm(A,inf) for inﬁnity-norm

kAk∞, and norm(A,’fro’) for

Frobenius norm ¡Pi(ATA)ii¢1/2

norm(A,’1’) for 1-norm kAk1,

max(svd(A)$d) for 2-norm kAk2,

norm(A,’i’) for inﬁnity-norm kAk∞,

and norm(A,’f’) for Frobenius norm

¡Pi(ATA)ii¢1/2

104 Condition number cond(A) =

kAk1kA−1k1of A, using 1-

norm

cond(A,1) (Note: Matlab also has

a function rcond(A) which computes

reciprocal condition estimator using

the 1-norm)

1/rcond(A,’1’)

105 Condition number cond(A) =

kAk2kA−1k2of A, using 2-

norm

cond(A,2) kappa(A, exact=TRUE) (leave out

the “exact=TRUE” for an esti-

mate)

106 Condition number cond(A) =

kAk∞kA−1k∞of A, using

inﬁnity-norm

cond(A,inf) 1/rcond(A,’I’)

D. Hiebeler, Matlab /RReference 10

No. Description Matlab R

107 Compute mean of all ele-

ments in vector or matrix

mean(v) for vectors, mean(A(:)) for

matrices

mean(v) or mean(A)

108 Compute means of columns

of a matrix

mean(A) colMeans(A)

109 Compute means of rows of a

matrix

mean(A,2) rowMeans(A)

110 Compute standard deviation

of all elements in vector or

matrix

std(v) for vectors, std(A(:)) for

matrices. This normalizes by n−1.

Use std(v,1) to normalize by n.

sd(v) for vectors, sd(c(A)) for ma-

trices. This normalizes by n−1.

111 Compute standard deviations

of columns of a matrix

std(A). This normalizes by n−1.

Use std(A,1) to normalize by n

sd(A). This normalizes by n−1.

112 Compute standard deviations

of rows of a matrix

std(A,0,2) to normalize by n−1,

std(A,1,2) to normalize by n

apply(A,1,sd). This normalizes by

n−1.

113 Compute variance of all ele-

ments in vector or matrix

var(v) for vectors, var(A(:)) for

matrices. This normalizes by n−1.

Use var(v,1) to normalize by n.

var(v) for vectors, var(c(A)) for

matrices. This normalizes by n−1.

114 Compute variance of columns

of a matrix

var(A). This normalizes by n−1.

Use var(A,1) to normalize by n

apply(A,2,var). This normalizes by

n−1.

115 Compute variance of rows of

a matrix

var(A,0,2) to normalize by n−1,

var(A,1,2) to normalize by n

apply(A,1,var). This normalizes by

n−1.

116 Compute covariance for two

vectors of observations

cov(v,w) computes the 2 ×2 co-

variance matrix; the oﬀ-diagonal ele-

ments give the desired covariance

cov(v,w)

117 Compute covariance matrix,

giving covariances between

columns of matrix A

cov(A) var(A) or cov(A)

118 Given matrices Aand B,

build covariance matrix C

where cij is the covariance be-

tween column iof Aand col-

umn jof B

I don’t know of a direct way to

do this in Matlab. But one way is

[Y,X]=meshgrid(std(B),std(A));

X.*Y.*corr(A,B)

cov(A,B)

119 Compute Pearson’s linear

correlation coeﬃcient be-

tween elements of vectors v

and w

corr(v,w) Note: vand wmust

be column vectors. To make it

work regardless of whether they

are row or column vectors, do

corr(v(:),w(:))

cor(v,w)

120 Compute Kendall’s tau corre-

lation statistic for vectors v

and w

corr(v,w,’type’,’kendall’) cor(v,w,method=’kendall’)

121 Compute Spearman’s rho

correlation statistic for

vectors vand w

corr(v,w,’type’,’spearman’) cor(v,w,method=’spearman’)

122 Compute pairwise Pearson’s

correlation coeﬃcient be-

tween columns of matrix

A

corr(A) The ’type’ argument may

also be used as in the previous two

items

cor(A) The method argument may

also be used as in the previous two

items

123 Compute matrix Cof pair-

wise Pearson’s correlation co-

eﬃcients between each pair of

columns of matrices Aand B,

i.e. so cij is the correlation

between column iof Aand

column jof B

corr(A,B) The ’type’ argument

may also be used as just above

cor(A,B) The method argument

may also be used as just above

D. Hiebeler, Matlab /RReference 11

No. Description Matlab R

124 Compute sum of all elements

in vector or matrix

sum(v) for vectors, sum(A(:)) for

matrices

sum(v) or sum(A)

125 Compute sums of columns of

matrix

sum(A) colSums(A)

126 Compute sums of rows of ma-

trix

sum(A,2) rowSums(A)

127 Compute product of all ele-

ments in vector or matrix

prod(v) for vectors, prod(A(:)) for

matrices

prod(v) or prod(A)

128 Compute products of

columns of matrix

prod(A) apply(A,2,prod)

129 Compute products of rows of

matrix

prod(A,2) apply(A,1,prod)

130 Compute matrix exponential

eA=P∞

k=0 Ak/k!

expm(A) expm(Matrix(A)), but this is part of

the Matrix package which you’ll need

to install (see item 331 for how to in-

stall/load packages).

131 Compute cumulative sum of

values in vector

cumsum(v) cumsum(v)

132 Compute cumulative sums of

columns of matrix

cumsum(A) apply(A,2,cumsum)

133 Compute cumulative sums of

rows of matrix

cumsum(A,2) t(apply(A,1,cumsum))

134 Compute cumulative sum

of all elements of matrix

(column-by-column)

cumsum(A(:)) cumsum(A)

135 Cumulative product of ele-

ments in vector v

cumprod(v) (Can also be used in the

various ways cumsum can)

cumprod(v) (Can also be used in the

various ways cumsum can)

136 Cumulative minimum or

maximum of elements in

vector v

I don’t know of an easy way to do

this in Matlab

cummin(v) or cummax(v)

137 Compute diﬀerences between

consecutive elements of vec-

tor v. Result is a vector

w1 element shorter than v,

where element iof wis ele-

ment i+1 of vminus element

iof v

diff(v) diff(v)

138 Make a vector ythe same size

as vector x, which equals 4

everywhere that xis greater

than 5, and equals 3 every-

where else (done via a vector-

ized computation).

z = [3 4]; y = z((x > 5)+1) y = ifelse(x > 5, 4, 3)

139 Compute minimum of values

in vector v

min(v) min(v)

140 Compute minimum of all val-

ues in matrix A

min(A(:)) min(A)

141 Compute minimum value of

each column of matrix A

min(A) (returns a row vector) apply(A,2,min) (returns a vector)

142 Compute minimum value of

each row of matrix A

min(A, [ ], 2) (returns a column

vector)

apply(A,1,min) (returns a vector)

D. Hiebeler, Matlab /RReference 12

No. Description Matlab R

143 Given matrices Aand B,

compute a matrix where each

element is the minimum of

the corresponding elements of

Aand B

min(A,B) pmin(A,B)

144 Given matrix Aand scalar

c, compute a matrix where

each element is the minimum

of cand the corresponding el-

ement of A

min(A,c) pmin(A,c)

145 Find minimum among all val-

ues in matrices Aand B

min([A(:) ; B(:)]) min(A,B)

146 Find index of the ﬁrst time

min(v) appears in v, and

store that index in ind

[y,ind] = min(v) ind = which.min(v)

Notes:

•Matlab and Rboth have a max function (and Rhas pmax and which.max as well) which behaves

in the same ways as min but to compute maxima rather than minima.

•Functions like exp,sin,sqrt etc. will operate on arrays in both Matlab and R, doing the

computations for each element of the matrix.

No. Description Matlab R

147 Number of rows in Asize(A,1) nrow(A)

148 Number of columns in Asize(A,2) ncol(A)

149 Dimensions of A, listed in a

vector

size(A) dim(A)

150 Number of elements in vector

v

length(v) length(v)

151 Total number of elements in

matrix A

numel(A) length(A)

152 Max. dimension of Alength(A) max(dim(A))

153 Sort values in vector vsort(v) sort(v)

154 Sort values in v, putting

sorted values in s, and indices

in idx, in the sense that s[k]

= x[idx[k]]

[s,idx]=sort(v) tmp=sort(v,index.return=TRUE);

s=tmp$x; idx=tmp$ix

155 Sort the order of the rows of

matrix m

sortrows(m)

This sorts according to the ﬁrst col-

umn, then uses column 2 to break

ties, then column 3 for remaining

ties, etc. Complex numbers are

sorted by abs(x), and ties are then

broken by angle(x).

m[order(m[,1]),]

This only sorts according to the ﬁrst

column. To use column 2 to break

ties, and then column 3 to break fur-

ther ties, do

m[order(m[,1], m[,2], m[,3]),]

Complex numbers are sorted ﬁrst by

real part, then by imaginary part.

156 Sort order of rows of matrix

m, specifying to use columns

c1,c2,c3 as the sorting

“keys”

sortrows(m, [c1 c2 c2]) m[order(m[,c1], m[,c2],

m[,c3]),]

D. Hiebeler, Matlab /RReference 13

No. Description Matlab R

157 Same as previous item, but

sort in decreasing order for

columns c1 and c2

sortrows(m, [-c1 -c2 c2]) m[order(-m[,c1], -m[,c2],

m[,c3]),]

158 Sort order of rows of matrix

m, and keep indices used for

sorting

[y,i] = sortrows(m) i=order(m[1,]); y=m[i,]

159 To count how many values in

the vector vare between 4

and 7 (inclusive on the upper

end)

sum((v > 4) & (v <= 7)) sum((v > 4) & (v <= 7))

160 Given vector v, return list of

indices of elements of vwhich

are greater than 5

find(v > 5) which(v > 5)

161 Given matrix A, return list

of indices of elements of A

which are greater than 5, us-

ing single-indexing

find(A > 5) which(A > 5)

162 Given matrix A, generate

vectors rand cgiving rows

and columns of elements of A

which are greater than 5

[r,c] = find(A > 5) w = which(A > 5, arr.ind=TRUE);

r=w[,1]; c=w[,2]

163 Given vector x(of presum-

ably discrete values), build a

vector vlisting unique val-

ues in x, and corresponding

vector cindicating how many

times those values appear in

x

v = unique(x); c = hist(x,v); w=table(x); c=as.numeric(w);

v=as.numeric(names(w))

164 Given vector x(of presum-

ably continuous values), di-

vide the range of values into k

equally-sized bins, and build

a vector mcontaining the

midpoints of the bins and a

corresponding vector ccon-

taining the counts of values in

the bins

[c,m] = hist(x,k) w=hist(x,seq(min(x),max(x),

length.out=k+1), plot=FALSE);

m=w$mids; c=w$counts

165 Convolution / polynomial

multiplication (given vectors

xand ycontaining polyno-

mial coeﬃcients, their convo-

lution is a vector containing

coeﬃcients of the product of

the two polynomials)

conv(x,y) convolve(x,rev(y),type=’open’)

Note: the accuracy of this is not

as good as Matlab; e.g. doing

v=c(1,-1); for (i in 2:20)

v=convolve(v,c(-i,1),

type=’open’) to generate the

20th-degree Wilkinson polynomial

W(x) = Q20

i=1(x−i) gives a coeﬃcient

of ≈ −780.19 for x19, rather than the

correct value -210.

D. Hiebeler, Matlab /RReference 14

3.4 Root-ﬁnding

No. Description Matlab R

166 Find roots of polynomial

whose coeﬃcients are stored

in vector v(coeﬃcients in v

are highest-order ﬁrst)

roots(v) polyroot(rev(v)) (This function

really wants the vector to have the

constant coeﬃcient ﬁrst in v;rev re-

verses their order to achieve this.)

167 Find zero (root) of a function

f(x) of one variable

Deﬁne function f(x), then do

fzero(f,x0) to search for a root

near x0, or fzero(f,[a b]) to ﬁnd

a root between aand b, assuming

the sign of f(x) diﬀers at x=a

and x=b. Default forward error

tolerance (i.e. error in x) is machine

epsilon ǫmach.

Deﬁne function f(x), then do

uniroot(f, c(a,b)) to ﬁnd a root

between aand b, assuming the sign

of f(x) diﬀers at x=aand x=b.

Default forward error tolerance (i.e.

error in x) is fourth root of machine

epsilon, (ǫmach)0.25. To specify e.g.

a tolerance of 2−52, do uniroot(f,

c(a,b), tol=2^-52).

3.5 Function optimization/minimization

No. Description Matlab R

168 Find value mwhich mini-

mizes a function f(x) of one

variable within the interval

from ato b

Deﬁne function f(x), then do

m = fminbnd(f, a, b)

Deﬁne function f(x), then do

m = optimize(f,c(a,b))$minimum

169 Find value mwhich mini-

mizes a function f(x, p1, p2)

with given extra parameters

(but minimization is only oc-

curing over the ﬁrst argu-

ment), in the interval from a

to b.

Deﬁne function f(x,p1,p2), then use

an “anonymous function”:

% first define values for p1

% and p2, and then do:

m=fminbnd(@(x) f(x,p1,p2),a,b)

Deﬁne function f(x,p1,p2), then:

# first define values for p1

# and p2, and then do:

m = optimize(f, c(a,b), p1=p1,

p2=p2)$minimum

170 Find values of x, y, z which

minimize function f(x, y, z),

using a starting guess of x=

1, y= 2.2, and z= 3.4.

First write function f(v) which ac-

cepts a vector argument vcontaining

values of x,y, and z, and returns the

scalar value f(x, y, z), then do:

fminsearch(@f,[1 2.2 3.4])

First write function f(v) which ac-

cepts a vector argument vcontaining

values of x,y, and z, and returns the

scalar value f(x, y, z), then do:

optim(c(1,2.2,3.4),f)$par

171 Find values of x, y, z

which minimize function

f(x, y, z, p1, p2), using a

starting guess of x= 1,

y= 2.2, and z= 3.4, where

the function takes some extra

parameters (useful e.g. for

doing things like nonlinear

least-squares optimization

where you pass in some data

vectors as extra parameters).

First write function f(v,p1,p2)

which accepts a vector argument

vcontaining values of x,y, and

z, along with the extra parame-

ters, and returns the scalar value

f(x, y, z, p1, p2), then do:

fminsearch(@f,[1 2.2 3.4], ...

[ ], p1, p2)

Or use an anonymous function:

fminsearch(@(x) f(x,p1,p2), ...

[1 2.2 3.4])

First write function f(v,p1,p2) which

accepts a vector argument vcontain-

ing values of x,y, and z, along with

the extra parameters, and returns the

scalar value f(x, y, z, p1, p2), then do:

optim(c(1,2.2,3.4), f, p1=p1,

p2=p2)$par

D. Hiebeler, Matlab /RReference 15

3.6 Numerical integration / quadrature

No. Description Matlab R

172 Numerically integrate func-

tion f(x) over interval from

ato b

quad(f,a,b) uses adaptive Simp-

son’s quadrature, with a default

absolute tolerance of 10−6. To

specify absolute tolerance, use

quad(f,a,b,tol)

integrate(f,a,b) uses adaptive

quadrature with default absolute

and relative error tolerances being

the fourth root of machine epsilon,

(ǫmach)0.25 ≈1.22 ×10−4. Tol-

erances can be speciﬁed by using

integrate(f,a,b, rel.tol=tol1,

abs.tol=tol2). Note that the func-

tion fmust be written to work even

when given a vector of xvalues as its

argument.

173 Simple trapezoidal numerical

integration using (x, y) values

in vectors xand y

trapz(x,y) sum(diff(x)*(y[-length(y)]+

y[-1])/2)

D. Hiebeler, Matlab /RReference 16

3.7 Curve ﬁtting

No. Description Matlab R

174 Fit the line y=c1x+c0to

data in vectors xand y.p = polyfit(x,y,1)

The return vector phas the coeﬃ-

cients in descending order, i.e. p(1)

is c1, and p(2) is c0.

p = coef(lm(y ~ x))

The return vector phas the coeﬃ-

cients in ascending order, i.e. p[1] is

c0, and p[2] is c1.

175 Fit the quadratic polynomial

y=c2x2+c1x+c0to data in

vectors xand y.p = polyfit(x,y,2)

The return vector phas the coeﬃ-

cients in descending order, i.e. p(1)

is c2,p(2) is c1, and p(3) is c0.

p = coef(lm(y ~ x + I(x^2)))

The return vector phas the coeﬃ-

cients in ascending order, i.e. p[1] is

c0,p[2] is c1, and p[3] is c2.

176 Fit nth degree polynomial

y=cnxn+cn−1xn−1+. . . +

c1x+c0to data in vectors x

and y.

p = polyfit(x,y,n)

The return vector phas the coeﬃ-

cients in descending order, p(1) is

cn,p(2) is cn−1, etc.

No simple built-in way. But this will

work: coef(lm(as.formula(paste(

’y~’,paste(’I(x^’,1:n,’)’,

sep=’’,collapse=’+’)))))

This more concise “lower-

level” method will also work:

coef(lm.fit(outer(x,0:n,’^’),y))

Note that both of the above return

the coeﬃcients in ascending order.

Also see the polyreg function in the

mda package (see item 331 for how

to install/load packages).

177 Fit the quadratic polynomial

with zero intercept, y=

c2x2+c1xto data in vectors

xand y.

(I don’t know a simple way do this

in Matlab, other than to write a

function which computes the sum

of squared residuals and use fmin-

search on that function. There is

likely an easy way to do it in the

Statistics Toolbox.)

p=coef(lm(y ~ -1 + x + I(x^2)))

The return vector phas the coeﬃ-

cients in ascending order, i.e. p[1] is

c1, and p[2] is c2.

178 Fit natural cubic spline

(S′′ (x) = 0 at both end-

points) to points (xi, yi)

whose coordinates are in

vectors xand y; evaluate at

points whose xcoordinates

are in vector xx, storing

corresponding y’s in yy

pp=csape(x,y,’variational’);

yy=ppval(pp,xx) but note that

csape is in Matlab’s Spline

Toolbox

tmp=spline(x,y,method=’natural’,

xout=xx); yy=tmp$y

179 Fit cubic spline using

Forsythe, Malcolm and

Moler method (third deriva-

tives at endpoints match

third derivatives of exact cu-

bics through the four points

at each end) to points (xi, yi)

whose coordinates are in

vectors xand y; evaluate at

points whose xcoordinates

are in vector xx, storing

corresponding y’s in yy

I’m not aware of a function to do this

in Matlab

tmp=spline(x,y,xout=xx);

yy=tmp$y

D. Hiebeler, Matlab /RReference 17

No. Description Matlab R

180 Fit cubic spline such that

ﬁrst derivatives at endpoints

match ﬁrst derivatives of ex-

act cubics through the four

points at each end) to points

(xi, yi) whose coordinates are

in vectors xand y; evaluate

at points whose xcoordinates

are in vector xx, storing cor-

responding y’s in yy

pp=csape(x,y); yy=ppval(pp,xx)

but csape is in Matlab’s Spline

Toolbox

I’m not aware of a function to do this

in R

181 Fit cubic spline with periodic

boundaries, i.e. so that ﬁrst

and second derivatives match

at the left and right ends

(the ﬁrst and last yvalues

of the provided data should

also agree), to points (xi, yi)

whose coordinates are in vec-

tors xand y; evaluate at

points whose xcoordinates

are in vector xx, storing cor-

responding y’s in yy

pp=csape(x,y,’periodic’);

yy=ppval(pp,xx) but csape is in

Matlab’s Spline Toolbox

tmp=spline(x,y,method=

’periodic’, xout=xx); yy=tmp$y

182 Fit cubic spline with “not-

a-knot” conditions (the ﬁrst

two piecewise cubics coincide,

as do the last two), to points

(xi, yi) whose coordinates are

in vectors xand y; evaluate

at points whose xcoordinates

are in vector xx, storing cor-

responding y’s in yy

yy=spline(x,y,xx) I’m not aware of a function to do this

in R

4 Conditionals, control structure, loops

No. Description Matlab R

183 “for” loops over values in a

vector v(the vector vis of-

ten constructed via a:b)for i=v

command1

command2

end

If only one command inside the loop:

for (i in v)

command

or

for (i in v) command

If multiple commands inside the loop:

for (i in v) {

command1

command2

}

D. Hiebeler, Matlab /RReference 18

No. Description Matlab R

184 “if” statements with no else

clause if cond

command1

command2

end

If only one command inside the clause:

if (cond)

command

or

if (cond) command

If multiple commands:

if (cond) {

command1

command2

}

185 “if/else” statement

if cond

command1

command2

else

command3

command4

end

Note: Matlab also has an “elseif”

statement, e.g.:

if cond1

command1

elseif cond2

command2

elseif cond3

command3

else

command4

end

If one command in clauses:

if (cond)

command1 else

command2

or

if (cond) cmd1 else cmd2

If multiple commands:

if (cond) {

command1

command2

} else {

command3

command4

}

Warning: the “else” must be on the

same line as command1 or the “}”

(when typed interactively at the com-

mand prompt), otherwise Rthinks the

“if” statement was ﬁnished and gives

an error.

Rdoes not have an “elseif” state-

ment.

Logical comparisons which can be used on scalars in “if” statements, or which operate element-by-

element on vectors/matrices:

Matlab RDescription

x<a x <aTrue if xis less than a

x>a x >aTrue if xis greater than a

x<= a x <= aTrue if xis less than or equal to a

x>= a x >= aTrue if xis greater than or equal to a

x == a x == a True if xis equal to a

x~= a x != a True if xis not equal to a

D. Hiebeler, Matlab /RReference 19

Scalar logical operators:

Description Matlab R

a AND b a && b a && b

a OR b a || b a || b

a XOR b xor(a,b) xor(a,b)

NOT a ~a !a

The && and || operators are short-circuiting, i.e. && stops as soon as any of its terms are FALSE, and

|| stops as soon as any of its terms are TRUE.

Matrix logical operators (they operate element-by-element):

Description Matlab R

a AND b a & b a & b

a OR b a | b a | b

a XOR b xor(a,b) xor(a,b)

NOT a ~a !a

No. Description Matlab R

186 To test whether a scalar value

xis between 4 and 7 (inclu-

sive on the upper end)

if ((x > 4) && (x <= 7)) if ((x > 4) && (x <= 7))

187 To count how many values in

the vector xare between 4

and 7 (inclusive on the upper

end)

sum((x > 4) & (x <= 7)) sum((x > 4) & (x <= 7))

188 Test whether all values in

a logical/boolean vector are

TRUE

all(v) all(v)

189 Test whether any values in

a logical/boolean vector are

TRUE

any(v) any(v)

D. Hiebeler, Matlab /RReference 20

No. Description Matlab R

190 “while” statements to do iter-

ation (useful when you don’t

know ahead of time how

many iterations you’ll need).

E.g. to add uniform ran-

dom numbers between 0 and

1 (and their squares) until

their sum is greater than 20:

mysum = 0;

mysumsqr = 0;

while (mysum < 20)

r = rand;

mysum = mysum + r;

mysumsqr = mysumsqr + r^2;

end

mysum = 0

mysumsqr = 0

while (mysum < 20) {

r = runif(1)

mysum = mysum + r

mysumsqr = mysumsqr + r^2

}

(As with “if” statements and “for”

loops, the curly brackets are not nec-

essary if there’s only one statement in-

side the “while” loop.)

191 More ﬂow control: these com-

mands exit or move on to the

next iteration of the inner-

most while or for loop, re-

spectively.

break and continue break and next

192 “Switch” statements for inte-

gers switch (x)

case 10

disp(’ten’)

case {12,13}

disp(’dozen (bakers?)’)

otherwise

disp(’unrecognized’)

end

Rdoesn’t have a switch statement ca-

pable of doing this. It has a function

which is fairly limited for integers, but

can which do string matching. See

?switch for more. But a basic ex-

ample of what it can do for integers is

below, showing that you can use it to

return diﬀerent expressions based on

whether a value is 1,2,....

mystr = switch(x, ’one’, ’two’,

’three’); print(mystr)

Note that switch returns NULL if xis

larger than 3 in the above case. Also,

continuous values of xwill be trun-

cated to integers.

D. Hiebeler, Matlab /RReference 21

5 Functions, ODEs

No. Description Matlab R

193 Implement a function

add(x,y)

Put the following in add.m:

function retval=add(x,y)

retval = x+y;

Then you can do e.g. add(2,3)

Enter the following, or put it in a ﬁle

and source that ﬁle:

add = function(x,y) {

return(x+y)

}

Then you can do e.g. add(2,3).

Note, the curly brackets aren’t needed

if your function only has one line.

Also, the return keyword is optional

in the above example, as the value of

the last expression in a function gets

returned, so just x+y would work

too.

194 Implement a function

f(x,y,z) which returns mul-

tiple values, and store those

return values in variables u

and v

Write function as follows:

function [a,b] = f(x,y,z)

a = x*y+z; b=2*sin(x-z);

Then call the function by doing:

[u,v] = f(2,8,12)

Write function as follows:

f = function(x,y,z) {

a = x*y+z; b=2*sin(x-z)

return(list(a,b))

}

Then call the function by do-

ing: tmp=f(2,8,12); u=tmp[[1]];

v=tmp[[2]]. The above is most gen-

eral, and will work even when uand

vare diﬀerent types of data. If they

are both scalars, the function could

simply return them packed in a vec-

tor, i.e. return(c(a,b)). If they

are vectors of the same size, the func-

tion could return them packed to-

gether into the columns of a matrix,

i.e. return(cbind(a,b)).

D. Hiebeler, Matlab /RReference 22

No. Description Matlab R

195 Numerically solve ODE

dx/dt = 5xfrom t= 3 to

t= 12 with initial condition

x(3) = 7

First implement function

function retval=f(t,x)

retval = 5*x;

Then do ode45(@f,[3,12],7)

to plot solution, or

[t,x]=ode45(@f,[3,12],7) to get

back vector tcontaining time values

and vector xcontaining correspond-

ing function values. If you want

function values at speciﬁc times,

e.g. 3,3.1,3.2,...,11.9,12, you can

do [t,x]=ode45(@f,3:0.1:12,7).

Note: in older versions of Matlab,

use ’f’ instead of @f.

First implement function

f = function(t,x,parms) {

return(list(5*x))

}

Then do y=lsoda(7, seq(3,12,

0.1), f,NA) to obtain solution

values at times 3,3.1,3.2,...,11.9,12.

The ﬁrst column of y, namely y[,1]

contains the time values; the second

column y[,2] contains the corre-

sponding function values. Note:

lsoda is part of the deSolve package

(see item 331 for how to install/load

packages).

196 Numerically solve system of

ODEs dw/dt = 5w,dz/dt =

3w+ 7zfrom t= 3 to t= 12

with initial conditions w(3) =

7, z(3) = 8.2

First implement function

function retval=myfunc(t,x)

w = x(1); z = x(2);

retval = zeros(2,1);

retval(1) = 5*w;

retval(2) = 3*w + 7*z;

Then do

ode45(@myfunc,[3,12],[7;

8.2]) to plot solution, or

[t,x]=ode45(@myfunc,[3,12],[7;

8.2]) to get back vector tcontain-

ing time values and matrix x, whose

ﬁrst column containing correspond-

ing w(t) values and second column

contains z(t) values. If you want

function values at speciﬁc times, e.g.

3,3.1,3.2,...,11.9,12, you can do

[t,x]=ode45(@myfunc,3:0.1:12,[7;

8.2]). Note: in older versions of

Matlab, use ’f’ instead of @f.

First implement function

myfunc = function(t,x,parms) {

w = x[1]; z = x[2];

return(list(c(5*w, 3*w+7*z)))

}

Then do y=lsoda(c(7,8.2),

seq(3,12, 0.1), myfunc,NA)

to obtain solution values at times

3,3.1,3.2,...,11.9,12. The ﬁrst

column of y, namely y[,1] contains

the time values; the second column

y[,2] contains the corresponding

values of w(t); and the third column

contains z(t). Note: lsoda is part of

the deSolve package (see item 331

for how to install/load packages).

197 Pass parameters such as r=

1.3 and K= 50 to an ODE

function from the command

line, solving dx/dt =rx(1 −

x/K) from t= 0 to t= 20

with initial condition x(0) =

2.5.

First implement function

function retval=func2(t,x,r,K)

retval = r*x*(1-x/K)

Then do ode45(@func2,[0 20],

2.5, [ ], 1.3, 50). The empty

matrix is necessary between the ini-

tial condition and the beginning of

your extra parameters.

First implement function

func2=function(t,x,parms) {

r=parms[1]; K=parms[2]

return(list(r*x*(1-x/K)))

}

Then do

y=lsoda(2.5,seq(0,20,0.1),

func2,c(1.3,50))

Note: lsoda is part of the deSolve

package (see item 331 for how to in-

stall/load packages).

D. Hiebeler, Matlab /RReference 23

6 Probability and random values

No. Description Matlab R

198 Generate a continuous uni-

form random value between 0

and 1

rand runif(1)

199 Generate vector of nuniform

random vals between 0 and 1

rand(n,1) or rand(1,n) runif(n)

200 Generate m×nmatrix of uni-

form random values between

0 and 1

rand(m,n) matrix(runif(m*n),m,n) or just

matrix(runif(m*n),m)

201 Generate m×nmatrix of con-

tinuous uniform random val-

ues between aand b

a+rand(m,n)*(b-a) or if you

have the Statistics toolbox then

unifrnd(a,b,m,n)

matrix(runif(m*n,a,b),m)

202 Generate a random integer

between 1 and k

floor(k*rand) + 1 floor(k*runif(1)) + 1 Note:

sample(k)[1] would also work, but I

believe in general will be less eﬃcient,

because that actually generates many

random numbers and then just uses

one of them.

203 Generate m×nmatrix of dis-

crete uniform random inte-

gers between 1 and k

floor(k*rand(m,n))+1 or if you

have the Statistics toolbox then

unidrnd(k,m,n)

floor(k*matrix(runif(m*n),m))+1

204 Generate m×nmatrix where

each entry is 1 with probabil-

ity p, otherwise is 0

(rand(m,n)<p)*1 Note: multiplying

by 1 turns the logical (true/false) re-

sult back into numeric values. You

could also do double(rand(m,n)<p)

(matrix(runif(m,n),m)<p)*1

(Note: multiplying by 1 turns the

logical (true/false) result back into

numeric values; using as.numeric()

to do it would lose the shape of the

matrix.)

205 Generate m×nmatrix where

each entry is awith probabil-

ity p, otherwise is b

b + (a-b)*(rand(m,n)<p) b + (a-b)*(matrix(

runif(m,n),m)<p)

206 Generate a random integer

between aand binclusive

floor((b-a+1)*rand)+a or if you

have the Statistics toolbox then

unidrnd(b-a+1)+a-1

floor((b-a+1)*runif(1))+a

207 Flip a coin which comes up

heads with probability p, and

perform some action if it does

come up heads

if (rand < p)

...some commands...

end

if (runif(1) < p) {

...some commands...

}

208 Generate a random permuta-

tion of the integers 1,2, . . . , n

randperm(n) sample(n)

209 Generate a random selection

of kunique integers between

1 and n(i.e. sampling with-

out replacement)

[s,idx]=sort(rand(n,1));

ri=idx(1:k) or another way is

ri=randperm(n); ri=ri(1:k). Or

if you have the Statistics Toolbox,

then randsample(n,k)

ri=sample(n,k)

210 Choose kvalues (with re-

placement) from the vector v,

storing result in w

L=length(v);

w=v(floor(L*rand(k,1))+1) Or,

if you have the Statistics Toolbox,

w=randsample(v,k)

w=sample(v,k,replace=TRUE)

D. Hiebeler, Matlab /RReference 24

No. Description Matlab R

211 Choose kvalues (without re-

placement) from the vector v,

storing result in w

L=length(v); ri=randperm(L);

ri=ri(1:k); w=v(ri) Or, if

you have the Statistics Toolbox,

w=randsample(v,k)

w=sample(v,k,replace=FALSE)

212 Set the random-number gen-

erator back to a known state

(useful to do at the beginning

of a stochastic simulation

when debugging, so you’ll get

the same sequence of random

numbers each time)

rand(’state’, 12) Note: begin-

ning in Matlab 7.7, use this in-

stead: RandStream(’mt19937ar’,

’Seed’, 12) though the previous

method is still supported for now.

set.seed(12)

Note that the “*rnd,” “*pdf,” and “*cdf” functions described below are all part of the Matlab

Statistics Toolbox, and not part of the core Matlab distribution.

No. Description Matlab R

213 Generate a random value

from the binomial(n, p) dis-

tribution

binornd(n,p) rbinom(1,n,p)

214 Generate a random value

from the Poisson distribution

with parameter λ

poissrnd(lambda) rpois(1,lambda)

215 Generate a random value

from the exponential distri-

bution with mean µ

exprnd(mu) or -mu*log(rand) will

work even without the Statistics

Toolbox.

rexp(1, 1/mu)

216 Generate a random value

from the discrete uniform dis-

tribution on integers 1 . . . k

unidrnd(k) or floor(rand*k)+1

will work even without the Statistics

Toolbox.

sample(k,1)

217 Generate niid random values

from the discrete uniform dis-

tribution on integers 1 . . . k

unidrnd(k,n,1) or

floor(rand(n,1)*k)+1 will work

even without the Statistics Toolbox.

sample(k,n,replace=TRUE)

218 Generate a random value

from the continuous uniform

distribution on the interval

(a, b)

unifrnd(a,b) or (b-a)*rand + a

will work even without the Statistics

Toolbox.

runif(1,a,b)

219 Generate a random value

from the normal distribution

with mean µand standard

deviation σ

normrnd(mu,sigma) or

mu + sigma*randn will work

even without the Statistics Toolbox.

rnorm(1,mu,sigma)

220 Generate a random vector

from the multinomial distri-

bution, with ntrials and

probability vector p

mnrnd(n,p) rmultinom(1,n,p)

221 Generate jrandom vectors

from the multinomial distri-

bution, with ntrials and

probability vector p

mnrnd(n,p,j)

The vectors are returned as rows of

a matrix

rmultinom(j,n,p)

The vectors are returned as columns

of a matrix

Notes:

•The Matlab “*rnd” functions above can all take additional r,c arguments to build an r×cmatrix

of iid random values. E.g. poissrnd(3.5,4,7) for a 4 ×7 matrix of iid values from the Poisson

distribution with mean λ= 3.5. The unidrnd(k,n,1) command above is an example of this, to

generate a k×1 column vector.

D. Hiebeler, Matlab /RReference 25

•The ﬁrst parameter of the R“r*” functions above speciﬁes how many values are desired. E.g. to

generate 28 iid random values from a Poisson distribution with mean 3.5, use rpois(28,3.5). To

get a 4 ×7 matrix of such values, use matrix(rpois(28,3.5),4).

No. Description Matlab R

222 Compute probability that

a random variable from the

Binomial(n, p) distribution

has value x(i.e. the density,

or pdf).

binopdf(x,n,p) or

nchoosek(n,x)*p^x*(1-p)^(n-x)

will work even without the Statistics

Toolbox, as long as nand xare

non-negative integers and 0 ≤p

≤1.

dbinom(x,n,p)

223 Compute probability that a

random variable from the

Poisson(λ) distribution has

value x.

poisspdf(x,lambda) or

exp(-lambda)*lambda^x /

factorial(x) will work even

without the Statistics Toolbox, as

long as xis a non-negative integer

and lambda ≥0.

dpois(x,lambda)

224 Compute probability density

function at xfor a random

variable from the exponential

distribution with mean µ.

exppdf(x,mu) or

(x>=0)*exp(-x/mu)/mu will work

even without the Statistics Toolbox,

as long as mu is positive.

dexp(x,1/mu)

225 Compute probability density

function at xfor a random

variable from the Normal dis-

tribution with mean µand

standard deviation σ.

normpdf(x,mu,sigma) or

exp(-(x-mu)^2/(2*sigma^2))/

(sqrt(2*pi)*sigma) will work even

without the Statistics Toolbox.

dnorm(x,mu,sigma)

226 Compute probability density

function at xfor a random

variable from the continuous

uniform distribution on inter-

val (a, b).

unifpdf(x,a,b) or

((x>=a)&&(x<=b))/(b-a) will

work even without the Statistics

Toolbox.

dunif(x,a,b)

227 Compute probability that a

random variable from the dis-

crete uniform distribution on

integers 1 . . . n has value x.

unidpdf(x,n) or ((x==floor(x))

&& (x>=1)&&(x<=n))/n will work

even without the Statistics Toolbox,

as long as nis a positive integer.

((x==round(x)) && (x >= 1) &&

(x <= n))/n

228 Compute probability that

a random vector from the

multinomial distribution

with probability vector ~p has

the value ~x

mnpdf(x,p)

Note: vector pmust sum to one.

Also, xand pcan be vectors of

length k, or if one or both are m×k

matrices then the computations are

performed for each row.

dmultinom(x,prob=p)

Note: one or more of the parameters in the above “*pdf” (Matlab) or “d*” (R) functions can be

vectors, but they must be the same size. Scalars are promoted to arrays of the appropriate size.

D. Hiebeler, Matlab /RReference 26

The corresponding CDF functions are below:

No. Description Matlab R

229 Compute probability that a

random variable from the

Binomial(n, p) distribution is

less than or equal to x(i.e.

the cumulative distribution

function, or cdf).

binocdf(x,n,p). Without the

Statistics Toolbox, as long

as nis a non-negative in-

teger, this will work: r =

0:floor(x); sum(factorial(n)./

(factorial(r).*factorial(n-r))

.*p.^r.*(1-p).^(n-r)). (Un-

fortunately, Matlab’s nchoosek

function won’t take a vector argu-

ment for k.)

pbinom(x,n,p)

230 Compute probability that a

random variable from the

Poisson(λ) distribution is less

than or equal to x.

poisscdf(x,lambda). With-

out the Statistics Toolbox, as

long as lambda ≥0, this

will work: r = 0:floor(x);

sum(exp(-lambda)*lambda.^r

./factorial(r))

ppois(x,lambda)

231 Compute cumulative distri-

bution function at xfor a

random variable from the ex-

ponential distribution with

mean µ.

expcdf(x,mu) or

(x>=0)*(1-exp(-x/mu)) will

work even without the Statistics

Toolbox, as long as mu is positive.

pexp(x,1/mu)

232 Compute cumulative distri-

bution function at xfor a ran-

dom variable from the Nor-

mal distribution with mean µ

and standard deviation σ.

normcdf(x,mu,sigma) or 1/2 -

erf(-(x-mu)/(sigma*sqrt(2)))/2

will work even without the Statis-

tics Toolbox, as long as sigma is

positive.

pnorm(x,mu,sigma)

233 Compute cumulative distri-

bution function at xfor a ran-

dom variable from the contin-

uous uniform distribution on

interval (a, b).

unifcdf(x,a,b) or

(x>a)*(min(x,b)-a)/(b-a) will

work even without the Statistics

Toolbox, as long as b>a.

punif(x,a,b)

234 Compute probability that a

random variable from the dis-

crete uniform distribution on

integers 1 . . . n is less than or

equal to x.

unidcdf(x,n) or

(x>=1)*min(floor(x),n)/n will

work even without the Statistics

Toolbox, as long as nis a positive

integer.

(x>=1)*min(floor(x),n)/n

D. Hiebeler, Matlab /RReference 27

7 Graphics

7.1 Various types of plotting

No. Description Matlab R

235 Create a new ﬁgure window figure dev.new() Notes: internally, on

Windows this calls windows(), on

MacOS it calls quartz(), and on

Linux it calls X11().X11() is also

available on MacOS; you can tell

Rto use it by default by doing

options(device=’X11’). In R

sometime after 2.7.0, X11 graphics

started doing antialising by default,

which makes plots look smoother

but takes longer to draw. If you are

using X11 graphics in Rand notice

that ﬁgure plotting is extremely slow

(especially if making many plots),

do this before calling dev.new():

X11.options(type=’Xlib’) or

X11.options(antialias=’none’).

Or just use e.g. X11(type=’Xlib’)

to make new ﬁgure windows. They

are uglier (lines are more jagged), but

render much more quickly.

236 Select ﬁgure number nfigure(n) (will create the ﬁgure if it

doesn’t exist)

dev.set(n) (returns the actual de-

vice selected; will be diﬀerent from n

if there is no ﬁgure device with num-

ber n)

237 Determine which ﬁgure win-

dow is currently active

gcf dev.cur()

238 List open ﬁgure windows get(0,’children’) (The 0 handle

refers to the root graphics object.)

dev.list()

239 Close ﬁgure window(s) close to close the current ﬁgure win-

dow, close(n) to close a speciﬁed

ﬁgure, and close all to close all ﬁg-

ures

dev.off() to close the currently ac-

tive ﬁgure device, dev.off(n) to close

a speciﬁed one, and graphics.off()

to close all ﬁgure devices.

240 Plot points using open circles plot(x,y,’o’) plot(x,y)

241 Plot points using solid lines plot(x,y) plot(x,y,type=’l’) (Note: that’s a

lower-case ’L’, not the number 1)

242 Plotting: color, point mark-

ers, linestyle

plot(x,y,str) where str is a

string specifying color, point marker,

and/or linestyle (see table below)

(e.g. ’gs--’ for green squares with

dashed line)

plot(x,y,type=str1,

pch=arg2,col=str3,

lty=arg4)

See tables below for possible values of

the 4 parameters

243 Plotting with logarithmic

axes

semilogx,semilogy, and loglog

functions take arguments like plot,

and plot with logarithmic scales for

x,y, and both axes, respectively

plot(..., log=’x’),plot(...,

log=’y’), and plot(...,

log=’xy’) plot with logarithmic

scales for x,y, and both axes,

respectively

D. Hiebeler, Matlab /RReference 28

No. Description Matlab R

244 Make bar graph where the x

coordinates of the bars are in

x, and their heights are in y

bar(x,y) Or just bar(y) if you only

want to specify heights. Note: if A

is a matrix, bar(A) interprets each

column as a separate set of observa-

tions, and each row as a diﬀerent ob-

servation within a set. So a 20 ×2

matrix is plotted as 2 sets of 20 ob-

servations, while a 2 ×20 matrix is

plotted as 20 sets of 2 observations.

Can’t do this in R; but barplot(y)

makes a bar graph where you specify

the heights, barplot(y,w) also spec-

iﬁes the widths of the bars, and hist

can make plots like this too.

245 Make histogram of values in

x

hist(x) hist(x)

246 Given vector xcontaining

discrete values, make a bar

graph where the xcoordi-

nates of bars are the values,

and heights are the counts of

how many times the values

appear in x

v=unique(x); c=hist(x,v);

bar(v,c)

barplot(table(x))

247 Given vector xcontaining

continuous values, lump the

data into kbins and make a

histogram / bar graph of the

binned data

[c,m] = hist(x,k); bar(m,c) or

for slightly diﬀerent plot style use

hist(x,k)

hist(x,seq(min(x), max(x),

length.out=k+1))

248 Make a plot containing error-

bars of height sabove and be-

low (x, y) points

errorbar(x,y,s) errbar(x,y,y+s,y-s) Note: errbar

is part of the Hmisc package (see

item 331 for how to install/load pack-

ages).

249 Make a plot containing error-

bars of height aabove and b

below (x, y) points

errorbar(x,y,b,a) errbar(x,y,y+a,y-b) Note: errbar

is part of the Hmisc package (see

item 331 for how to install/load pack-

ages).

250 Other types of 2-D plots stem(x,y) and stairs(x,y)

for other types of 2-D plots.

polar(theta,r) to use polar

coordinates for plotting.

pie(v)

D. Hiebeler, Matlab /RReference 29

No. Description Matlab R

251 Make a 3-D plot of some data

points with given x,y,zco-

ordinates in the vectors x,y,

and z.

plot3(x,y,z) This works much like

plot, as far as plotting symbols, line-

types, and colors.

cloud(z~x*y) You can also use

arguments pch and col as with

plot. To make a 3-D plot with

lines, do cloud(z~x*y,type=’l’,

panel.cloud=panel.3dwire)

252 Surface plot of data in matrix

Asurf(A)

You can then click on the small

curved arrow in the ﬁgure window

(or choose “Rotate 3D” from the

“Tools” menu), and then click and

drag the mouse in the ﬁgure to ro-

tate it in three dimensions.

persp(A)

You can include shading in the im-

age via e.g. persp(A,shade=0.5).

There are two viewing angles you

can also specify, among other pa-

rameters, e.g. persp(A, shade=0.5,

theta=50, phi=35).

253 Surface plot of f(x, y) =

sin(x+y)√yfor 100 values

of xbetween 0 and 10, and

90 values of ybetween 2 and

8

x = linspace(0,10,100);

y = linspace(2,8,90);

[X,Y] = meshgrid(x,y);

Z = sin(X+Y).*sqrt(Y);

surf(X,Y,Z)

shading flat

x = seq(0,10,len=100)

y = seq(2,8,len=90)

f = function(x,y)

return(sin(x+y)*sqrt(y))

z = outer(x,y,f)

persp(x,y,z)

254 Other ways of plotting the

data from the previous com-

mand

mesh(X,Y,Z),surfc(X,Y,Z),

surfl(X,Y,Z),contour(X,Y,Z),

pcolor(X,Y,Z),

waterfall(X,Y,Z). Also see the

slice command.

contour(x,y,z) Or do

s=expand.grid(x=x,y=y), and

then wireframe(z~x*y,s) or

wireframe(z~x*y,s,shade=TRUE)

(Note: wireframe is part of the

lattice package; see item 331 for how

to load packages). If you have vectors

x,y, and zall the same length, you

can also do symbols(x,y,z).

255 Set axis ranges in a ﬁgure

window

axis([x1 x2 y1 y2]) You have to do this when

you make the plot, e.g.

plot(x,y,xlim=c(x1,x2),

ylim=c(y1,y2))

256 Add title to plot title(’somestring’) title(main=’somestring’)

adds a main title,

title(sub=’somestring’) adds

a subtitle. You can also include

main= and sub= arguments in a

plot command.

257 Add axis labels to plot xlabel(’somestring’) and

ylabel(’somestring’)

title(xlab=’somestring’,

ylab=’anotherstr’). You can

also include xlab= and ylab=

arguments in a plot command.

D. Hiebeler, Matlab /RReference 30

No. Description Matlab R

258 Include Greek letters or sym-

bols in plot axis labels

You can use basic TeX com-

mands, e.g. plot(x,y);

xlabel(’\phi^2 + \mu_{i,j}’)

or xlabel(’fecundity \phi’)

See also help tex and parts of

doc text props for more about

building labels using general LaTeX

commands

plot(x,y,xlab=

expression(phi^2 + mu[’i,j’]))

or plot(x,y,xlab=expression(

paste(’fecundity ’, phi)))

See also help(plotmath) and p.

98 of the RGraphics book by Paul

Murrell for more.

259 Change font size to 16 in plot

labels

For the legends and numerical axis

labels, use set(gca, ’FontSize’,

16), and for text labels on axes

do e.g. xlabel(’my x var’,

’FontSize’, 16)

For on-screen graphics, do

par(ps=16) followed by e.g. a plot

command. For PostScript or PDF

plots, add a pointsize=16 argument,

e.g. pdf(’myfile.pdf’, width=8,

height=8, pointsize=16) (see

items 275 and 276)

260 Add grid lines to plot grid on (and grid off to turn oﬀ) grid() Note that if you’ll be

printing the plot, the default style

for grid-lines is to use gray dot-

ted lines, which are almost invis-

ible on some printers. You may

want to do e.g. grid(lty=’dashed’,

col=’black’) to use black dashed

lines which are easier to see.

261 Add a text label to a plot text(x,y,’hello’) text(x,y,’hello’)

262 Add set of text labels to a

plot. xv and yv are vectors.

s={’hi’, ’there’};

text(xv,yv,s)

s=c(’hi’, ’there’);

text(xv,yv,s)

263 Add an arrow to current plot,

with tail at (xt, yt) and head

at (xh, yh)

annotation(’arrow’, [xt xh],

[yt yh]) Note: coordinates should

be normalized ﬁgure coordinates, not

coordinates within your displayed

axes. Find and download from The

Mathworks the ﬁle dsxy2ﬁgxy.m

which converts for you, then do this:

[fx,fy]=dsxy2figxy([xt xh],

[yt yh]); annotation(’arrow’,

fx, fy)

arrows(xt, yt, xh, yh)

264 Add a double-headed arrow

to current plot, with coordi-

nates (x0, y0) and (x1, y1)

annotation(’doublearrow’, [x0

x1], [y0 y1]) See note in previ-

ous item about normalized ﬁgure

coordinates.

arrows(x0, y0, x1, y1, code=3)

265 Add ﬁgure legend to top-left

corner of plot

legend(’first’, ’second’,

’Location’, ’NorthWest’)

legend(’topleft’,

legend=c(’first’, ’second’),

col=c(’red’, ’blue’),

pch=c(’*’,’o’))

Matlab note: sometimes you build a graph piece-by-piece, and then want to manually add a legend

which doesn’t correspond with the order you put things in the plot. You can manually construct a legend

by plotting “invisible” things, then building the legend using them. E.g. to make a legend with black stars

and solid lines, and red circles and dashed lines: h1=plot(0,0,’k*-’); set(h1,’Visible’, ’off’);

h2=plot(0,0,’k*-’); set(h2,’Visible’, ’off’); legend([h1 h2], ’blah, ’whoa’). Just be sure

to choose coordinates for your “invisible” points within the current ﬁgure’s axis ranges.

D. Hiebeler, Matlab /RReference 31

No. Description Matlab R

266 Adding more things to a ﬁg-

ure

hold on means everything plotted

from now on in that ﬁgure window is

added to what’s already there. hold

off turns it oﬀ. clf clears the ﬁgure

and turns oﬀ hold.

points(...) and lines(...) work

like plot, but add to what’s already

in the ﬁgure rather than clearing the

ﬁgure ﬁrst. points and lines are

basically identical, just with diﬀerent

default plotting styles. Note: axes

are not recalculated/redrawn when

adding more things to a ﬁgure.

267 Plot multiple data sets at

once

plot(x,y) where xand yare 2-D

matrices. Each column of xis plot-

ted against the corresponding col-

umn of y. If xhas only one column,

it will be re-used.

matplot(x,y) where xand yare 2-D

matrices. Each column of xis plotted

against the corresponding column of

y. If xhas only one column, it will be

re-used.

268 Plot sin(2x) for xbetween 7

and 18

fplot(’sin(2*x)’, [7 18]) curve(sin(2*x), 7, 18, 200)

makes the plot, by sampling the

value of the function at 200 values

between 7 and 18 (if you don’t

specify the number of points, 101

is the default). You could do this

manually yourself via commands

like tmpx=seq(7,18,len=200);

plot(tmpx, sin(2*tmpx)).

269 Plot color image of integer

values in matrix A

image(A) to use array values as

raw indices into colormap, or

imagesc(A) to automatically scale

values ﬁrst (these both draw row

1 of the matrix at the top of the

image); or pcolor(A) (draws row

1 of the matrix at the bottom of

the image). After using pcolor,

try the commands shading flat or

shading interp.

image(A) (it rotates the matrix 90 de-

grees counterclockwise: it draws row

1 of Aas the left column of the im-

age, and column 1 of Aas the bottom

row of the image, so the row number

is the xcoord and column number is

the ycoord). It also rescales colors. If

you are using a colormap with ken-

tries, but the value kdoes not appear

in A, use image(A,zlim=c(1,k))

to avoid rescaling of colors. Or

e.g. image(A,zlim=c(0,k-1)) if you

want values 0 through k−1 to be plot-

ted using the kcolors.

270 Add colorbar legend to image

plot

colorbar, after using image or

pcolor.

Use filled.contour(A) rather

than image(A), although it “blurs”

the data via interpolation, or

use levelplot(A) from the lat-

tice package (see item 331 for

how to load packages). To use

a colormap with the latter, do

e.g. levelplot(A,col.regions=

terrain.colors(100)).

271 Set colormap in image colormap(hot). Instead of hot, you

can also use gray,flag,jet (the

default), cool,bone,copper,pink,

hsv,prism. By default, the length

of the new colormap is the same as

the currently-installed one; use e.g.

colormap(hot(256)) to specify the

number of entries.

image(A,col=terrain.colors(100)).

The parameter 100 speciﬁes the

length of the colormap. Other

colormaps are heat.colors(),

topo.colors(), and cm.colors().

D. Hiebeler, Matlab /RReference 32

No. Description Matlab R

272 Build your own colormap us-

ing Red/Green/Blue triplets

Use an n×3 matrix; each row

gives R,G,B intensities between 0

and 1. Can use as argument with

colormap. E.g. for 2 colors: mycmap

= [0.5 0.8 0.2 ; 0.2 0.2 0.7]

Use a vector of hexadecimal strings,

each beginning with ’#’ and giving

R,G,B intensities between 00 and FF.

E.g. c(’#80CC33’,’#3333B3’); can

use as argument to col= parameter

to image. You can build such a

vector of strings from vectors of Red,

Green, and Blue intensities (each

between 0 and 1) as follows (for a

2-color example): r=c(0.5,0.2);

g=c(0.8,0.2); b=c(0.2,0.7);

mycolors=rgb(r,g,b).

Matlab plotting speciﬁcations, for use with plot,fplot,semilogx,semilogy,loglog, etc:

Symbol Color Symbol Marker Symbol Linestyle

bblue .point (.) -solid line

ggreen ocircle (◦):dotted line

rred xcross (×)-. dash-dot line

ccyan +plus sign (+) -- dashed line

mmagenta *asterisk (∗)

yyellow ssquare (¤)

kblack ddiamond (♦)

wwhite vtriangle (down) (▽)

^triangle (up) (△)

<triangle (left) (⊳)

>triangle (right) (⊲)

ppentragram star

hhexagram star

Rplotting speciﬁcations for col (color), pch (plotting character), and type arguments, for use with plot,

matplot,points, and lines:

col Description pch Description type Description

’blue’ Blue ’a’ a (similarly for other

characters, but see ’.’

below for an exception

ppoints

’green’ Green 0open square llines

’red’ Red 1open circle bboth

’cyan’ Cyan 2triangle point-up clines part only of “b”

’magenta’ Magenta 3+ (plus) olines, points overplotted

’yellow’ Yellow 4×(cross) hhistogram-like lines

’black’ Black 5diamond ssteps

’#RRGGBB’ hexadecimal speciﬁca-

tion of Red, Green,

Blue

6triangle point-down Sanother kind of steps

(Other names) See colors() for list of

available color names.

’.’ rectangle of size 0.01

inch, 1 pixel, or 1 point

(1/72 inch) depending

on device

nno plotting (can be use-

ful for setting up axis

ranges, etc.)

(See table on next page

for more)

D. Hiebeler, Matlab /RReference 33

Rplotting speciﬁcations for lty (line-type) argument, for use with plot,matplot,points, and lines:

lty Description

0 blank

1 solid

2 dashed

3 dotted

4 dotdash

5 longdash

6 twodash

0 1 2 3 4 5

6 7 8 9 10 11

12 13 14 15 16 17

18 19 20 21 22 23

24 25 AAb

b . #

#

Rplotting characters, i.e. values for pch argument (from the book RGraphics, by Paul Murrell,

Chapman & Hall / CRC, 2006)

D. Hiebeler, Matlab /RReference 34

No. Description Matlab R

273 Divide up a ﬁgure window

into smaller sub-ﬁgures

subplot(m,n,k) divides the current

ﬁgure window into an m×nar-

ray of subplots, and draws in sub-

plot number kas numbered in “read-

ing order,” i.e. left-to-right, top-to-

bottom. E.g. subplot(2,3,4) se-

lects the ﬁrst sub-ﬁgure in the second

row of a 2 ×3 array of sub-ﬁgures.

You can do more complex things,

e.g. subplot(5,5,[1 2 6 7]) se-

lects the ﬁrst two subplots in the ﬁrst

row, and ﬁrst two subplots in the

second row, i.e. gives you a bigger

subplot within a 5 ×5 array of sub-

plots. (If you that command followed

by e.g. subplot(5,5,3) you’ll see

what’s meant by that.)

There are several ways to do this, e.g.

using layout or split.screen, al-

though they aren’t quite as friendly

as Matlab ’s. E.g. if you let A=

1 1 2

1 1 3

4 5 6

, then layout(A) will

divide the ﬁgure into 6 sub-ﬁgures:

you can imagine the ﬁgure divide into

a 3 ×3 matrix of smaller blocks; sub-

ﬁgure 1 will take up the upper-left

2×2 portion, and sub-ﬁgures 2–6 will

take up smaller portions, according to

the positions of those numbers in the

matrix A. Consecutive plotting com-

mands will draw into successive sub-

ﬁgures; there doesn’t seem to be a way

to explicitly specify which sub-ﬁgure

to draw into next.

To use split.screen, you can

do e.g. split.screen(c(2,1)) to

split into a 2 ×1 matrix of sub-

ﬁgures (numbered 1 and 2). Then

split.screen(c(1,3),2) splits sub-

ﬁgure 2 into a 1 ×3 matrix of smaller

sub-ﬁgures (numbered 3, 4, and 5).

screen(4) will then select sub-ﬁgure

number 4, and subsequent plotting

commands will draw into it.

A third way to accomplish this is

via the commands par(mfrow=) or

par(mfcol=) to split the ﬁgure win-

dow, and par(mfg=) to select which

sub-ﬁgure to draw into.

Note that the above methods are all

incompatible with each other.

274 Force graphics windows to

update

drawnow (Matlab normally only

updates ﬁgure windows when a

script/function ﬁnishes and returns

control to the Matlab prompt, or

under a couple of other circum-

stances. This forces it to update

ﬁgure windows to reﬂect any recent

plotting commands.)

Rautomatically updates graphics

windows even before functions/scripts

ﬁnish executing, so it’s not neces-

sary to explictly request it. But note

that some graphics functions (partic-

ularly those in the lattice package)

don’t display their results when called

from scripts or functions; e.g. rather

than levelplot(...) you need to do

print(levelplot(...)). Such func-

tions will automatically display their

plots when called interactively from

the command prompt.

D. Hiebeler, Matlab /RReference 35

7.2 Printing/saving graphics

No. Description Matlab R

275 To print/save to a PDF ﬁle

named fname.pdf

print -dpdf fname saves the con-

tents of currently active ﬁgure win-

dow

First do pdf(’fname.pdf’). Then,

do various plotting commands

to make your image, as if you

were plotting in a window. Fi-

nally, do dev.off() to close/save

the PDF ﬁle. To print the con-

tents of the active ﬁgure win-

dow, do dev.copy(device=pdf,

file=’fname.pdf’); dev.off().

(But this will not work if you’ve

turned oﬀ the display list via

dev.control(displaylist=

’inhibit’).) You can also simply use

dev.copy2pdf(file=’fname.pdf’).

276 To print/save to a PostScript

ﬁle fname.ps or fname.eps

print -dps fname for black &

white PostScript; print -dpsc

fname for color PostScript; print

-deps fname for black & white

Encapsulated PostScript; print

-depsc fname for color Encapsu-

lated PostScript. The ﬁrst two save

to fname.ps, while the latter two

save to fname.eps.

postscript(’fname.eps’), followed

by your plotting commands, fol-

lowed by dev.off() to close/save

the ﬁle. Note: you may want to

use postscript(’fname.eps’,

horizontal=FALSE) to save your ﬁg-

ure in portrait mode rather than the

default landscape mode. To print the

contents of the active ﬁgure window,

do dev.copy(device=postscript,

file=’fname.eps’); dev.off().

(But this will not work if you’ve

turned oﬀ the display list via

dev.control(displaylist=

’inhibit’).) You can also include

the horizontal=FALSE argument

with dev.copy(). The command

dev.copy2eps(file=’fname.eps’)

also saves in portrait mode.

277 To print/save to a JPEG ﬁle

fname.jpg with jpeg qual-

ity = 90 (higher quality looks

better but makes the ﬁle

larger)

print -djpeg90 fname jpeg(’fname.jpg’,quality=90),

followed by your plotting commands,

followed by dev.off() to close/save

the ﬁle.

D. Hiebeler, Matlab /RReference 36

7.3 Animating cellular automata / lattice simulations

No. Description Matlab R

278 To display images of cellu-

lar automata or other lattice

simulations while running in

real time

Repeatedly use either pcolor or

image to display the data. Don’t

forget to call drawnow as well, oth-

erwise the ﬁgure window will not be

updated with each image.

If you simply call image repeatedly,

there is a great deal of ﬂicker-

ing/ﬂashing. To avoid this, after

drawing the image for the ﬁrst time

using e.g. image(A), from then

on only use image(A,add=TRUE),

which avoids redrawing the entire

image (and the associated ﬂicker).

However, this will soon consume a

great deal of memory, as all drawn

images are saved in the image buﬀer.

There are two solutions to that

problem: (1) every ktime steps,

leave oﬀ the “add=TRUE” argument

to ﬂush the image buﬀer (and get

occasional ﬂickering), where you

choose kto balance the ﬂickering

vs. memory-usage tradeoﬀ; or

(2) after drawing the ﬁrst image,

do dev.control(displaylist=

’inhibit’) to prohibit retaining the

data. However, the latter solution

means that after the simulation is

done, the ﬁgure window will not be

redrawn if it is resized, or temporarily

obscured by another window. (A

call to dev.control(displaylist=

’enable’) and then one ﬁnal

image(A) at the end of the sim-

ulation will re-enable re-drawing

after resizing or obscuring, without

consuming extra memory.)

D. Hiebeler, Matlab /RReference 37

8 Working with ﬁles

No. Description Matlab R

279 Create a folder (also known

as a “directory”)

mkdir dirname dir.create(’dirname’)

280 Set/change working directory cd dirname setwd(’dirname’)

281 See list of ﬁles in current

working directory

dir dir()

282 Run commands in ﬁle ‘foo.m’

or ‘foo.R’ respectively

foo source(’foo.R’)

283 Read data from text ﬁle

“data.txt” into matrix A

A=load(’data.txt’) or

A=importdata(’data.txt’) Note

that both routines will ignore com-

ments (anything on a line following

a “%” character)

A=as.matrix(read.table(

’data.txt’)) This will ignore

comments (anything on a line

following a “#” character). To ig-

nore comments indicated by “%”,

do A=as.matrix(read.table(

’data.txt’, comment.char=’%’))

284 Read data from text ﬁle

“data.txt” into matrix A,

skipping the ﬁrst slines of the

ﬁle

tmp=importdata(’data.txt’,

’ ’,s);

a=tmp.data

A=as.matrix(read.table(

’data.txt’, skip=s))

285 Write data from matrix A

into text ﬁle “data.txt”

save data.txt A -ascii write(t(A), file=’data.txt’,

ncolumn=dim(A)[2])

D. Hiebeler, Matlab /RReference 38

9 Miscellaneous

9.1 Variables

No. Description Matlab R

286 Assigning to variables x = 5 x <- 5 or x=5Note: for compati-

bility with S-plus, many people prefer

the ﬁrst form.

287 From within a function, as-

sign a value to variable y

in the base environment (i.e.

the command prompt envi-

ronment)

assignin(’base’, ’y’, 7) y <<- 7

288 From within a function, ac-

cess the value of variable y

in the base environment (i.e.

the command prompt envi-

ronment)

evalin(’base’, ’y’) get(’y’, envir=globalenv())

Though note that inside a function,

if there isn’t a local variable y, then

just the expression ywill look for one

in the base environment, but if there

is a local ythen that one will be used

instead.

289 Short list of deﬁned variables who ls()

290 Long list of deﬁned variables whos ls.str()

291 See detailed info about the

variable ab

whos ab str(ab)

292 See detailed info about all

variables with “ab” in their

name

whos *ab* ls.str(pattern=’ab’)

293 Open graphical data editor,

to edit the value of variable

A(useful for editing values in

a matrix, though it works for

non-matrix variables as well)

openvar(A), or double-click on the

variable in the Workspace pane (if

it’s being displayed) of your Mat-

labdesktop

fix(A)

294 Clear one variable clear x rm(x)

295 Clear two variables clear x y rm(x,y)

296 Clear all variables clear all rm(list=ls())

297 See what type of object xis class(x) class(x) and typeof(x) give diﬀer-

ent aspects of the “type” of x

298 (Variable names) Variable names must begin with a

letter, but after that they may con-

tain any combination of letters, dig-

its, and the underscore character.

Names are case-sensitive.

Variable names may contain letters,

digits, the period, and the underscore

character. They cannot begin with a

digit or underscore, or with a period

followed by a digit. Names are case-

sensitive.

299 Result of last command ans contains the result of the last

command which did not assign its

value to a variable. E.g. after 2+5;

x=3, then ans will contain 7.

.Last.value contains the result of

the last command, whether or not its

value was assigned to a variable. E.g.

after 2+5; x=3, then .Last.value will

contain 3.

D. Hiebeler, Matlab /RReference 39

9.2 Strings and Misc.

No. Description Matlab R

300 Line continuation If you want to break up a Matlab

command over more than one line,

end all but the last line with three

periods: “...”. E.g.:

x = 3 + ...

4

or

x = 3 ...

+ 4

In R, you can spread commands out

over multiple lines, and nothing ex-

tra is necessary. Rwill continue read-

ing input until the command is com-

plete. However, this only works when

the syntax makes it clear that the ﬁrst

line was not complete. E.g.:

x = 3 +

4

works, but

x = 3

+ 4

does not treat the second line as a con-

tinuation of the ﬁrst.

301 Controlling formatting of

output

format short g and

format long g are handy; see

help format

options(digits=6) tells Ryou’d like

to use 6 digits of precision in values it

displays (it is only a suggestion, not

strictly followed)

302 Exit the program quit or exit q() or quit()

303 Comments % this is a comment # this is a comment

304 Display a string disp(’hi there’) or to

omit trailing newline use

fprintf(’hi there’)

print(’hi there’) Note: to

avoid having double-quotes

around the displayed string, do

print(’hi there’, quote=FALSE)

or print(noquote(’hi there’)).

305 Display a string containing

single quotes

disp(’It’’s nice’) or

to omit trailing newline

fprintf(’It’’s nice’)

print(’It\’s nice’) or

print("It’s nice")

306 Give prompt and read numer-

ical input from user

x = input(’Enter data:’) print(’Enter data:’); x=scan()

But note: if in a script and you use

the Edit →Execute menu item to

run it, the selected text after the

scan statement will be used as source

for the input, rather than keyboard.

307 Give prompt and read char-

acter (string) input from user

x = input(’Enter string:’,’s’) x = readline(’Enter string:’)

308 Concatenate strings [’two hal’ ’ves’] paste(’two hal’, ’ves’, sep=’’)

309 Concatenate strings stored in

a vector

v={’two ’, ’halves’};

strcat(v{:}) But note that

this drops trailing spaces on

strings. To avoid that, instead do

strcat([v{:}])

v=c(’two ’, ’halves’);

paste(v, collapse=’’)

310 Extract substring of a string text1=’hi there’;

text2=text(2:6)

text1=’hi there’;

text2=substr(text1,2,6)

311 Determine whether elements

of a vector are in a set, and

give positions of correspond-

ing elements in the set.

x = {’a’, ’aa’, ’bc’, ’c’}; y

= {’da’, ’a’, ’bc’, ’a’, ’bc’,

’aa’}; [tf, loc]=ismember(x,y)

Then loc contains the locations of

last occurrences of elements of x

in the set y, and 0 for unmatched

elements.

x = c(’a’, ’aa’, ’bc’, ’c’); y

= c(’da’, ’a’, ’bc’, ’a’, ’bc’,

’aa’); loc=match(x,y) Then loc

contains the locations of ﬁrst oc-

curences of elements of xin the set

y, and NA for unmatched elements.

D. Hiebeler, Matlab /RReference 40

No. Description Matlab R

312 Find indices of regular ex-

pression pattern pin string s

v=regexp(s,p) v=gregexpr(p,s)[[1]] (The

returned vector also has a

“match.length” attribute giv-

ing lengths of the matches; this

attribute can be removed via

attributes(v)=NULL.)

313 Perform some commands

only if the regular expression

pis contained in the string sif (regexp(s,p)

...commands...

end

if (grepl(p,s)) {

...commands...

}

314 Convert number to string num2str(x) as.character(x)

315 Use sprintf to create a

formatted string. Use %d for

integers (“d” stands for “dec-

imal”, i.e. base 10), %f for

ﬂoating-point numbers, %e

for scientiﬁc-notation ﬂoating

point, %g to automatically

choose %e or %f based on

the value. You can spec-

ify ﬁeld-widths/precisions,

e.g. %5d for integers with

padding to 5 spaces, or %.7f

for ﬂoating-point with 7

digits of precision. There are

many other options too; see

the docs.

x=2; y=3.5;

s=sprintf(’x is %d, y=%g’, ...

x, y)

x=2; y=3.5

s=sprintf(’x is %d, y is %g’,

x, y)

316 Machine epsilon ǫmach, i.e.

diﬀerence between 1 and the

next largest double-precision

ﬂoating-point number

eps (See help eps for various other

things eps can give.)

.Machine$double.eps

317 Pause for xseconds pause(x) Sys.sleep(x)

318 Wait for user to press any key pause Don’t know of a way to do this in R,

but scan(quiet=TRUE) will wait until

the user presses the Enter key

319 Produce a beep (or possibly

a visual signal, depending on

preferences set)

beep alarm()

320 Measure CPU time used to

do some commands

t1=cputime; ...commands... ;

cputime-t1

t1=proc.time(); ...commands...

; (proc.time()-t1)[1]

321 Measure elapsed (“wall-

clock”) time used to do some

commands

tic; ...commands... ; toc or

t1=clock; ...commands... ;

etime(clock,t1)

t1=proc.time(); ...commands...

; (proc.time()-t1)[3]

322 Print an error message an in-

terrupt execution

error(’Problem!’) stop(’Problem!’)

323 Print a warning message warning(’Smaller problem!’) warning(’Smaller problem!’)

324 Putting multiple statements

on one line

Separate statements by commas or

semicolons. A semicolon at the end

of a statement suppresses display of

the results (also useful even with just

a single statement on a line), while a

comma does not.

Separate statements by semicolons.

D. Hiebeler, Matlab /RReference 41

No. Description Matlab R

325 Evaluate contents of a string

sas command(s).

eval(s) eval(parse(text=s))

326 Get a command prompt for

debugging, while executing a

script or function. While at

that prompt, you can type ex-

pressions to see the values of

variables, etc.

Insert the command keyboard in

your ﬁle. Note that your prompt will

change to K>>. When you are done

debugging and want to continue ex-

ecuting the ﬁle, type return.

Insert the command browser() in

your ﬁle. Note that your prompt will

change to Browse[1]>. When you are

done debugging and want to continue

executing the ﬁle, either type cor just

press return (i.e. enter a blank line).

Note, if you type n, you enter the step

debugger.

327 Show where a command is which sqrt shows you where the ﬁle

deﬁning the sqrt function is (but

note that many basic functions are

“built in,” so the Matlab func-

tion ﬁle is really just a stub con-

taining documentation). This is use-

ful if a command is doing something

strange, e.g. sqrt isn’t working. If

you’ve accidentally deﬁned a variable

called sqrt, then which sqrt will

tell you, so you can clear sqrt to

erase it so that you can go back to

using the function sqrt.

Rdoes not execute commands directly

from ﬁles, so there is no equivalent

command.

328 Query/set the search path. path displays the current search path

(the list of places Matlab searches

for commands you enter). To add a

directory ~/foo to the beginning of

the search path, do

addpath ~/foo -begin

or to add it to the end of the path,

do addpath ~/foo -end (Note: you

should generally add the full path

of a directory, i.e. in Linux or Mac

OS-X something like ~/foo as above

or of the form /usr/local/lib/foo,

while under Windows it would be

something like C:/foo)

Rdoes not use a search path to look

for ﬁles.

329 Startup sequence If a ﬁle startup.m exists in the

startup directory for Matlab, its

contents are executed. (See the

Matlab docs for how to change the

startup directory.)

If a ﬁle .Rproﬁle exists in the cur-

rent directory or the user’s home di-

rectory (in that order), its contents

are sourced; saved data from the ﬁle

.RData (if it exists) are then loaded.

If a function .First() has been de-

ﬁned, it is then called (so the obvious

place to deﬁne this function is in your

.Rproﬁle ﬁle).

330 Shutdown sequence Upon typing quit or exit,Matlab

will run the script ﬁnish.m if present

somewhere in the search path.

Upon typing q() or quit(),Rwill call

the function .Last() if it has been de-

ﬁned (one obvious place to deﬁne it

would be in the .Rproﬁle ﬁle)

D. Hiebeler, Matlab /RReference 42

No. Description Matlab R

331 Install and load a package. Matlab does not have packages. It

has toolboxes, which you can pur-

chase and install. “Contributed”

code (written by end users) can sim-

ply be downloaded and put in a di-

rectory which you then add to Mat-

lab’s path (see item 328 for how to

add things to Matlab’s path).

To install e.g. the deSolve pack-

age, you can use the command

install.packages(’deSolve’).

You then need to load the package

in order to use it, via the command

library(’deSolve’). When running

R again later you’ll need to load the

package again to use it, but you

should not need to re-install it. Note

that the lattice package is typically

included with binary distributions of

R, so it only needs to be loaded, not

installed.

10 Spatial Modeling

No. Description Matlab R

332 Take an L×L matrix Aof

0s and 1s, and “seed” frac-

tion pof the 0s (turn them

into 1s), not changing entries

which are already 1.

A = (A | (rand(L) < p))*1; A = (A | (matrix(runif(L^2),L)

< p))*1

333 Take an L×Lmatrix Aof 0s

and 1s, and “kill” fraction p

of the 1s (turn them into 0s),

not changing the rest of the

entries

A = (A & (rand(L) < 1-p))*1; A = (A & (matrix(runif(L^2),L)

< 1-p))*1

334 Do “wraparound” on a coor-

dinate newx that you’ve al-

ready calculated. You can

replace newx with x+dx if

you want to do wraparound

on an oﬀset xcoordinate.

mod(newx-1,L)+1 Note: for porta-

bility with other languages such as

C which handle MOD of negative

values diﬀerently, you may want to

get in the habit of instead doing

mod(newx-1+L,L)+1

((newx-1) %% L) + 1 Note: for

portability with other languages such

as C which handle MOD of nega-

tive values diﬀerently, you may want

to get in the habit of instead doing

((newx-1+L)%%L) + 1

335 Randomly initialize a portion

of an array: set fraction pof

sites in rows iy1 through iy2

and columns ix1 through ix2

equal to 1 (and set the rest of

the sites in that block equal

to zero). Note: this assume

iy1 <iy2 and ix1 <ix2.

dx=ix2-ix1+1; dy=iy2-iy1+1;

A(iy1:iy2,ix1:ix2) = ...

(rand(dy,dx) < p0)*1;

dx=ix2-ix1+1; dy=iy2-iy1+1;

A[iy1:iy2,ix1:ix2] =

(matrix(runif(dy*dx),dy) <

p0)*1

INDEX OF MATLAB COMMANDS AND CONCEPTS 43

Index of MATLAB commands and concepts

’, 83

,, 324

.*, 82

..., 300

./, 90

.^, 94

/, 89

:, 12–14

;, 324

=, 286

[, 6–8

%, 303

&, 186, 187

^, 54, 92, 93

\, 84, 91

{49

abs, 55, 74

acos, 60

acosh, 62

addpath, 328

all, 188

angle, 75

annotation, 263, 264

ans, 299

any, 189

arrows in plots, 263, 264

asin, 60

asinh, 62

assignin, 287

atan, 60

atanh, 62

average, see mean

axis, 255

bar, 244, 246, 247

beep, 319

binocdf, 229

binopdf, 222

binornd, 213

boolean tests

scalar, 186

vector, 187–189

break, 191

cd, 280

ceil, 66

cell, 48

cell arrays, 48

extracting elements of, 49

cellular automata animation, 278

chol, 100

circshift, 33

class, 297

clear, 294–296

clf, 266

clock, 321

close, 239

colon, see :

colorbar, 270

colormap

building your own, 272

colormap, 271, 272

column vector, 7

comments, 303

complex numbers, 73–78

cond, 104–106

conj, 76

continue, 191

contour, 254

conv, 165

corr, 118–123

cos, 59

cosh, 61

cov, 116, 117

cputime, 320

cross, 80

csape, 178, 180, 181

cubic splines, 179, 180

natural, 178

not-a-knot, 182

periodic, 181

cumprod, 135

cumsum, 131–134

cumulative distribution functions

binomial, 229

continuous uniform on interval (a, b), 233

discrete uniform from 1..n, 234

exponential, 231

normal, 232

Poisson, 230

debugging, 326

det, 86

diag, 22, 23

diff, 137

diﬀerential equations, see ode45

dir, 281

disp, 304, 305

doc, 4

dot, 79

INDEX OF MATLAB COMMANDS AND CONCEPTS 44

drawnow, 274, 278

echelon form, see matrix

eig, 96

element-by-element matrix operations, see ma-

trix

else, 185

elseif, 185

end, 40

eps, 316

erf, 68

erfc, 69

erfcinv, 71

erfinv, 70

error, 322

errorbar, 248, 249

etime, 321

eval, 325

evalin, 288

exit, 302, 330

exp, 56

expcdf, 231

expm, 130

exppdf, 224

exprnd, 215

eye, 21

figure, 235, 236

ﬁle

running commands in, 282

text

reading data from, 283, 284

saving data to, 285

find, 160–162

ﬁnish.m, 330

fliplr, 34

flipud, 35

floor, 65

fminbnd, 168, 169

fminsearch, 170, 171

font size in plots, 259

for, 183

format, 301

fplot, 268

fprintf, 304, 305

function

multi-variable

minimization, 170

minimization over ﬁrst parameter only, 169

minimization over only some parameters,

171

single-variable

minimization, 168

user-written, 193

returning multiple values, 194

fzero, 167

gca, 259

gcf, 237

get, 238

Greek letters

in plot labels, 258

grid, 260

help, 1–3

helpbrowser, 4

helpdesk, 4

hilb, 46

hist, 163, 164, 245, 246

hold, 266

identity, see matrix

if, 184–186

imag, 78

image, 269, 278

imagesc, 269

importdata, 283, 284

ind2sub, 36

indexing

matrix, 10

with a single index, 11

vector, 9

input, 306, 307

inv, 87

inverse, see matrix

ismember, 311

keyboard, 326

legend, 265

length, 150, 152

linspace, 15

load, 283

log, 57

log10, 58

log2, 58

loglog, 243

logspace, 16

lookfor, 5

lu, 97

matrix, 8

boolean operations on, 161, 162

changing shape of, 43

Cholesky factorization, 100

circular shift, 33

condition number, 104–106

INDEX OF MATLAB COMMANDS AND CONCEPTS 45

containing all indentical entries, 20

containing all zeros, 19

converting row, column to single index, 37

converting single-index to row, column, 36

cumulative sums of all elements of, 134

cumulative sums of columns, 132

cumulative sums of rows, 133

determinant, 86

diagonal, 22

echelon form, 85

eigenvalues and eigenvectors of, 96

equation

solving, 84

exponential of, 130

extracting a column of, 28

extracting a rectangular piece of, 31

extracting a row of, 29

extracting speciﬁed rows and columns of, 32

“gluing” together, 24, 25

identity, 21

inverse, 87

lower-triangular portion of, 44

LU factorization, 97

minimum of values of, 140

minimum value of each column of, 141

minimum value of each row of, 142

modifying elements given lists of rows and

columns, 38

multiplication, 81

element-by-element, 82

N-dimensional, 47

norm, 103

powers of, 93

product

of all elements, 127

of columns of, 128

of rows of, 129

QR factorization, 101

rank, 95

re-shaping its elements into a vector, 30

reverse elements in columns, 35

reverse elements in rows, 34

Schur decomposition, 99

singular value decomposition, 98

size of, 147–149, 151, 152

sum

of all elements, 124

of columns of, 125

of rows of, 126

trace, 88

transpose, 83

upper-triangular portion of, 45

max, see min

mean, 107–109

mesh, 254

meshgrid, 26, 118, 253

min, 139–142, 144–146

mind, 143

mkdir, 279

mnpdf, 228

mnrnd, 220, 221

mod, 63, 334

modulo arithmetic, 63, 334

multiple statements on one line, 324

nchoosek, 72

norm, 102, 103

normcdf, 232

normpdf, 225

normrnd, 219

num2str, 314

numel, 151

ode45, 195–197

ones, 18, 20

openvar, 293

optimization, 168–171

path, 328

pause, 317, 318

pcolor, 254, 269, 278

perform some commands with probability p, 207

permutation of integers 1..n, 208

plot, 240–242, 267

Greek letters in axis labels, 258

plot3, 251

poisscdf, 230

poisspdf, 223

poissrnd, 214

polar, 250

polyfit, 174–176

polynomial

least-squares ﬁtted, 175–177

multiplication, 165

roots of, 166

ppval, 178, 180, 181

print, 275–277

probability density functions

binomial, 222

continuous uniform on interval (a, b), 226

discrete uniform from 1..n, 227

exponential, 224

multinomial, 228

normal, 225

Poisson, 223

prod, 127–129

INDEX OF MATLAB COMMANDS AND CONCEPTS 46

qr, 101

quad, 172

quit, 302, 330

rand, 198–206, 212

random values

Bernoulli, 204

binomial, 213

continuous uniform distribution on interval

(a, b), 201, 218

continuous uniform distribution on interval

(0,1), 198–200

discrete uniform distribution from a..b, 206

discrete uniform distribution from 1..k, 203,

216, 217

discrete uniform distribution, 202

exponential, 215

kunique values sampled from integers 1..n,

209

multinomial, 220, 221

normal, 219

Poisson, 214

setting the seed, 212

randperm, 208, 209

randsample, 209–211

rank, 95

rcond, 104

real, 77

regexp, 312, 313

reshape, 43, 47

roots

of general single-variable function, 167

polynomial, 166

roots, 166

round, 64

row vector, 6

rref, 85

sampling values from a vector, 210, 211

save, 285

schur, 99

semilogx, 243

semilogy, 243

set, 259

shading, 269

sign, 67

sin, 59

sinh, 61

size, 147–149

slice, 254

sort, 153, 154, 209

sortrows, 155–158

spline, 182

splines, see cubic splines

sprintf, 315

sqrt, 53

stairs, 250

standard deviation, see std

startup.m, 329

std, 110–112

stem, 250

stop, 322

strcat, 309

string

concatenation, 308

converting number to, 314

pattern matching, 312, 313

substrings, 310

struct, 51

sub2ind, 37, 38

subplot, 273

sum, 124–126, 187

surf, 252, 253

surfc, 254

surfl, 254

svd, 98

switch, 192

tan, 59

tanh, 61

text, 261, 262

tic, 321

title, 256

toc, 321

trace, 88

transpose, see matrix

trapz, 173

tril, 44

triu, 45

unidcdf, 234

unidpdf, 227

unidrnd, 216, 217

unifcdf, 233

unifpdf, 226

unifrnd, 218

unique, 163, 246

var, 113–115

variables

assigning, 286

assigning in base environment from func-

tion, 287

evaluating from base environment within func-

tion, 288

names, 298

variance, see var

INDEX OF MATLAB COMMANDS AND CONCEPTS 47

vector

boolean operations on, 159, 160

containing all indentical entries, 18

containing all zeros, 17

counts of binned values in, 164

counts of discrete values in, 163

cross product, 80

cumulative sum of elements of, 131

diﬀerences between consecutive elements of,

137

dot product, 79

minimum of values of, 139

norm, 102

position of ﬁrst occurance of minimum value

in, 146

product of all elements, 127

reversing order of elements in, 27

size of, 150

sum of all elements, 124

truncating, 39

warning, 323

waterfall, 254

which, 327

while, 190

who, 289

whos, 290–292

xlabel, 257–259

ylabel, 257, 258

zeros, 17, 19

INDEX OF RCOMMANDS AND CONCEPTS 48

Index of Rcommands and concepts

*, 92

/, 90

:, 12, 13

;, 324

<-, 286

<<-, 287

=, 286

?, 1, 2

[[, 49

#, 303

%%, 63, 334

&, 186, 187

^, 54, 94

abs, 55, 74

acos, 60

acosh, 62

alarm, 319

all, 188

any, 189

apply, 34, 35, 112, 114, 115, 128, 141, 142

Arg, 75

array, 47

arrows, 263, 264

as.character, 314

as.formula, 176

as.numeric, 163

asin, 60

asinh, 62

atan, 60

atanh, 62

average, see mean

barplot, 244, 246

boolean tests

scalar, 186

vector, 187–189

break, 191

browser, 326

c, 6, 7

cbind, 24, 38

ceiling, 66

cellular automata animation, 278

chol, 100

choose, 72

class, 297

cloud, 251

coef, 174–177

colMeans, 108

colon, see :

colormap

building your own, 272

for image, 271

colSums, 125

column vector, 7

comments, 303

complex numbers, 73–78

Conj, 76

contour, 254

convolve, 165

cor, 119–123

cos, 59

cosh, 61

cov, 116–118

cubic splines, 179, 180, 182

natural, 178

periodic, 181

cummax, 136

cummin, 136

cumprod, 135

cumsum, 131–134

cumulative distribution functions

binomial, 229

continuous uniform on interval (a, b), 233

discrete uniform from 1..n, 234

exponential, 231

normal, 232

Poisson, 230

curve, 268

data.frame, 51

dbinom, 222

debugging, 326

det, 86

dev.control, 275, 276, 278

dev.copy, 275, 276

dev.copy2eps, 276

dev.copy2pdf, 275

dev.cur(), 237

dev.list, 238

dev.new, 235

dev.off, 239, 275–277

dev.set, 236

dexp, 224

diag, 21–23

diff, 137

diﬀerential equations, see lsoda

dim, 43, 149, 152

dir, 281

dir.create, 279

INDEX OF RCOMMANDS AND CONCEPTS 49

dmultinom, 228

dnorm, 225

dpois, 223

dunif, 226

echelon form, see matrix

eig, 96

element-by-element matrix operations, see ma-

trix

else, 185

errbar, 248, 249

eval, 325

exp, 56

expand, 97

expand.grid, 254

expm, 130

ﬁle

running commands in, 282

text

reading data from, 283, 284

saving data to, 285

filled.contour, 270

.First, 329

fix, 293

floor, 65

font size in plots, 259

for, 183

function

multi-variable

minimization, 170

minimization over ﬁrst parameter only, 169

minimization over only some parameters,

171

single-variable

minimization, 168

user-written, 193

returning multiple values, 194

get, 288

globalenv, 288

graphics

not being displayed from scripts/functions,

274

Greek letters

in plot labels, 258

gregexpr, 312

grepl, 313

grid, 260

help, 1, 2

help.search, 5

help.start, 4

Hilbert, 46

hist, 164, 244, 245, 247

identity, see matrix

if, 184–186

ifelse, 138

Im, 78

image, 269, 278

indexing

matrix, 10

with a single index, 11

vector, 9

install.packages, 331

integrate, 172

inverse, see matrix

jpeg, 277

kappa, 105

.Last, 330

.Last.value, 299

lattice package, 254, 270, 274, 331

layout, 273

legend, 265

length, 39, 40, 150, 151

levelplot, 270, 274

library, 3, 331

lines, 266

lists, 48

extracting elements of, 49

lm, 174–177

lm.fit, 176

log, 57

log10, 58

log2, 58

lower.tri, 45

ls, 289

ls.str, 290, 292

lsoda, 195–197

.Machine$double.eps, 316

match, 311

matplot, 267

matrix, 8

boolean operations on, 161, 162

changing shape of, 43

Cholesky factorization, 100

circular shift, 33

condition number, 104–106

containing all indentical entries, 20

containing all zeros, 19

converting row, column to single index, 37

converting single-index to row, column, 36

cumulative sums of all elements of, 134

INDEX OF RCOMMANDS AND CONCEPTS 50

cumulative sums of columns, 132

cumulative sums of rows, 133

determinant, 86

diagonal, 22

echelon form, 85

eigenvalues and eigenvectors of, 96

equation

solving, 84

exponential of, 130

extracting a column of, 28

extracting a rectangular piece of, 31

extracting a row of, 29

extracting speciﬁed rows and columns of, 32

“gluing” together, 24, 25

identity, 21

inverse, 87

lower-triangular portion of, 44

LU factorization, 97

minimum of values of, 140

minimum value of each column of, 141

minimum value of each row of, 142

modifying elements given lists of rows and

columns, 38

multiplication, 81

element-by-element, 82

N-dimensional, 47

norm, 103

powers of, 93

product

of all elements, 127

of columns of, 128

of rows of, 129

QR factorization, 101

rank, 95

re-shaping its elements into a vector, 30

reverse elements in columns, 35

reverse elements in rows, 34

Schur decomposition, 99

singular value decomposition, 98

size of, 147–149, 151, 152

sum

of all elements, 124

of columns of, 125

of rows of, 126

trace, 88

transpose, 83

upper-triangular portion of, 45

matrix, 8, 19, 20

max, see min

mean, 107

min, 139–142, 145

Mod, 74

modulo arithmetic, 63, 334

multiple statements on one line, 324

names, 50, 163

ncol, 148

next, 191

norm, 102, 103

nrow, 147

optim, 170, 171

optimization, 168–171

optimize, 168, 169

options

digits=, 301

order, 155–158

outer, 176, 253

packages

installing, 331

loading, 331

par, 259

par

mfcol=, 273

mfrow=, 273

parse, 325

paste, 176, 308, 309

pbinom, 229

pdf, 259, 275

perform some commands with probability p, 207

permutation of integers 1..n, 208

persp, 252, 253

pexp, 231

pie, 250

plot, 240–243

Greek letters in axis labels, 258

main=, 256

sub=, 256

xlab=, 257, 258

xlim=, 255

ylab=, 257, 258

ylim=, 255

pmin, 143, 144

pnorm, 68, 69, 232

points, 266

polynomial

least-squares ﬁtted, 175–177

multiplication, 165

roots of, 166

polyreg, 176

polyroot, 166

postscript, 276

ppois, 230

print, 274, 304, 305

probability density functions

binomial, 222

INDEX OF RCOMMANDS AND CONCEPTS 51

continuous uniform on interval (a, b), 226

discrete uniform from 1..n, 227

exponential, 224

multinomial, 228

normal, 225

Poisson, 223

proc.time, 320, 321

prod, 127–129

punif, 233

q, 302, 330

qnorm, 70, 71

qr, 95, 101

quartz, 235

quit, 302, 330

rand, 205

random values

Bernoulli, 204

binomial, 213

continuous uniform distribution on interval

(a, b), 201, 218

continuous uniform distribution on interval

(0,1), 198, 200

continuous uniform distribution on inteval

(0,1), 199

discrete uniform distribution from a..b, 206

discrete uniform distribution from 1..k, 203,

216, 217

discrete uniform distribution, 202

exponential, 215

kunique values sampled from integers 1..n,

209

multinomial, 220, 221

normal, 219

Poisson, 214

setting the seed, 212

rbind, 25

rbinom, 213

rcond, 104, 106

.RData, 329

Re, 77

read.table, 283, 284

readline, 307

rep, 17, 18

rev, 27

rexp, 215

rgb, 272

rm, 294–296

rmultinom, 220, 221

rnorm, 219

roots

of general single-variable function, 167

polynomial, 166

round, 64

row vector, 6

rowMeans, 109

rpois, 214

.Rprofile, 329

runif, 198–204, 206, 218

sample, 208–211, 216, 217

sampling values from a vector, 210, 211

scan, 306, 318

Schur, 99

sd, 110–112

seq, 14–16

set.seed, 212

setwd, 280

sign, 67

sin, 59

sinh, 61

solve, 84, 87, 89, 91

sort, 153, 154

source, 282

spline, 178, 179, 181

splines, see cubic splines

split.screen, 273

sprintf, 315

sqrt, 53

standard deviation, see sd

str, 291

string

concatenation, 308

converting number to, 314

pattern matching, 312, 313

substrings, 310

substr, 310

sum, 124, 126, 187

svd, 98

switch, 192

symbols, 254

Sys.sleep, 317

t, 83

table, 163, 246

tan, 59

tanh, 61

text, 261, 262

title, 256, 257

transpose, see matrix

typeof, 297

uniroot, 167

upper.tri, 44

var, 113–115, 117

INDEX OF RCOMMANDS AND CONCEPTS 52

variables

assigning, 286

assigning in base environment from func-

tion, 287

evaluating from base environment within func-

tion, 288

names, 298

variance, see var

vector

boolean operations on, 159, 160

containing all indentical entries, 18

containing all zeros, 17

counts of binned values in, 164

counts of discrete values in, 163

cross product, 80

cumulative sum of elements of, 131

diﬀerences between consecutive elements of,

137

dot product, 79

minimum of values of, 139

norm, 102

position of ﬁrst occurance of minimum value

in, 146

product of all elements, 127

reversing order of elements in, 27

size of, 150

sum of all elements, 124

truncating, 39

vector, 48

warning, 323

which, 160–162

which.max,see which.min

which.min, 146

while, 190

windows, 235

wireframe, 254

write, 285

x11, 235