Matlab Basics for Math 283

Starting up matlab:

Go to finder -> applications -> matlab701 -> matlab7.01
From a terminal command prompt:
matlab (display matlab desktop, access editor, helpdesk)
matlab –nojvm (no java virtual machine, no desktop -- faster)
matlab –nodisplay (no desktop, no plot windows -- faster)
matlab –help (to see all options)

NOTE: ">>" is the matlab prompt.

Operators, Punctuation

Operators
Arithmetic operators in matlab:


follow the convention in linear algebra . Matrices must have correct dimensions for any
operation. Follows order of operations . Use parentheses to change precedence
>> 1*2/3+4^5-4^5
ans =
0.6667
Element-by-element operators operate on arrays or matrices by element (essentially
operator preceded by a period):

>> [1 2 3].*[1 2 3]
ans =
1 4 9

Matlab Punctuation

% Denotes comment line. Information after % is ignored by matlab.
>> %nothing happens
>>
, Comma works like blank space. Concatenates array elems along row. Shows
results.
>> x=[1,2,3],
x =
1 2 3
; Concatenates array elements along column. Suppresses printing contents of
variable to screen.
>> x=[1;2;3]
x =
1
2
3
>> x=[1;2;3];
>>
: Specifies a range of numbers. A colon in an array dimension accesses all
elements in that dimension.
>> z=[1:0.25:2; 3:0.25:4] % row 1: 1 to 2, row 2: 3 to 4,
step size/increment by 0.25
z =
1.0000 1.2500 1.5000 1.7500 2.0000
3.0000 3.2500 3.5000 3.7500 4.0000
>> z(:,2) %all rows, column 2
ans =
1.2500
3.2500
>> z(1,:) %all columns, row 1
ans =
1.0000 1.2500 1.5000 1.7500 2.0000
Apostrophe at the end of a vector or matrix gives its transpose.
>> z(:,2)'
ans =
1.2500 3.2500

More basic operators/functions

Basic Data Structures

Basic data constructs are arrays and matrices.
Arrays can be row vectors (1 by n array) or column vectors (n by 1 array).

A matrix can have two dimensions (example: m rows and n columns). Multi-dimensional
arrays can also be specified.

>> row_vect = [1 4 5];
>> column_vect = [1;4;5];

Concatenate column vectors along same row:

>> two_column_vect = [column_vect column_vect]
two_column_vect =
1 1
4 4
5 5

Concatenate row vectors along same column:

>> two_row_vect = [row_vect; row_vect]
two_row_vect =
1 4 5
1 4 5

Accessing array elements

a(i) i-th element of array a.
A(i , : ) i-th row of a matrix A, all columns (Can select certain columns by putting
an array of indices instead of ‘:’ ).
A(:, i ) i-th column of a matrix A, all rows (Can select certain rows also by
putting an array of indices instead of ‘:’ ).
A(i , j ) Element in i-th row, j-th column of matrix A.

Array building

zeros, ones Builds arrays with all 0’s or all 1’s respectively.
>> x = zeros(1,3)
x =
0 0 0
eye Creates an identity matrix.
>> x= eye(2,2)
x =
1 0
0 1

Some basic functions on arrays and matrices

Type ‘help function_name’ for details on usage.

Not covered: cell arrays.

File and Workspace Management, File I/O

File and workspace management

dir, ls Show files in active directory
delete filename Remove file filename in active directory.
cd, pwd Show present directory
cd dir Changes the directory to dir
clear Remove all variables from workplace
clear x Remove variable x from the workplace.
who List all variables in the workspace

File I/O

load Syntax: load filename
Load from file. Check out variations of use. File should have correct format
(Same number of columns for each row, rows for each column) and no nonnumeric
characters. For instance if you have a file called test.dat in current dir:
>> load test.dat
>> test
test =
1
2
3
save Syntax: save filename variable –ascii
Saves ‘variable’ in ASCII format in’filename’.
>> save test_copy.dat test -ascii

Control Flow

Conditional Control – if , else, elseif, and switch/case

if, else, and elseif

if evaluates a logical expression and executes a group of statements based on the value
of the expression. In its simplest form , its syntax is

if logical_expression
statements
end

The else and elseif statements further conditionalize the if statement

The else statement has no logical condition . The statements associated with it execute if
the preceding if (and possibly elseif condition) evaluates to logical 0 (false).

The elseif statement has a logical condition that it evaluates if the preceding if (and
possibly elseif condition) is false. The statements associated with it execute if its
logical condition evaluates to logical 1 (true). You can have multiple elseif statements
within an if block.

For some value of n :

if n < 0 % If n negative, display message.
disp(’Input negative’);
elseif n == 0 % If n equals zero
disp(’Input zero’);
else %n greater than zero is remaining case
disp(’Input positive’);
end

switch, case, and otherwise

switch executes certain statements based on the value of a variable or expression.
Its basic form is

switch expression (scalar or string)
case value1
statements % Executes if expression is value1
case value2
statements % Executes if expression is value2
.
.
otherwise
statements % Executes if expression does not
% match any case
end

Loop control – for, while, break

for

The for loop executes a statement or group of statements a predetermined number
of times. Its syntax is

for index = start:increment:end
statements
end

The default increment is 1. You can specify any increment, including a negative one .
For positive indices, execution terminates when the value of the index exceeds the
end value; for negative increments, it terminates when the index is less than the end
value.

For example, this loop executes five times.

x=[1:10];
for n = 2:6
x(n) = 2 * x(n);
end

while

The while loop executes a statement or group of statements repeatedly as long as
the controlling expression is true (1). Its syntax is:

while expression
statements
end

If the expression evaluates to a matrix, all its elements must be 1 for execution to
continue. To reduce a matrix to a scalar value, use the all and any functions.

Increments n from 0 to 10:

n = 0;
while n < 10
n = n + 1
end

Exit a while loop at any time using the break statement. Useless example that
breaks at n==5:

n = 0;
while n < 10
n = n + 1;
if n ==5, break, end
end

Simple Plots

Basic commands

plot Draws plot of two equal-sized vectors x,y. Style is specified by character
string s where s could be for example ‘b*’ for blue asterisk or ‘bd’ for blue
diamonds representing points. Default is blue line with points connected.
Usage: plot(x,y) or plot(x,y, s)
hist Draws histogram of input array. Default number of bins is 10. Usage:
hist(array) or hist(array, num_bins)
xlabel Label for x-axis. Usage: xlabel(’x axis variable’)
ylabel Label for y-axis. Usage: xlabel(’y axis variable’)
axis Set specified x- and y-axis limits. Usage: axis([xmin xmax ymin ymax])
xlim Set x-axis limits only. Usage: xlim([xmin xmax])
ylim Set y-axis limits only. Usage: ylim([ymin ymax])
title Title over plot. Usage: title(’plot title’)
hold on,
off
‘hold on’ causes subsequent plots to be superimposed on current one,
whereas ‘hold off’ specifies each new plot start afresh. Default is off.
figure Creates a new figure window. Usage: figure;

Saving plots
Save plots in desired format using the figure window (File -> Save as) . To save the plot
on the current figure window as a png file using the command line,type:
>>print( gcf , '-dpng', '-r0', 'plot_filename');

More plotting function examples
Type ‘help function_name’ for details on usage.

Scripts and Functions

An M-file is a text file that contains MATLAB commands and has a .m filename extension.
Use Matlab Editor/Debugger or any text editor (emacs, vi) to create function.m or
script.m file. To start in MATLAB, go to File->New-> M-file
Note that the name of the function or script filename is identical to the command invoked
at MATLAB prompt (without the .m extension).
Script M-files No input or output arguments and operate on variables in the workspace.
Just a series of commands. Example: script.m

>> x = [-3:.1:3];
>> y = x .^ 2;
>> plot(x,y);
>> xlabel('x');
>> ylabel('y');
>> title('parabola y = x^2');
>> print(gcf,'-dpng','-r0','parabola.png');
>> print(gcf,'-depsc','parabola.eps');

% script.m
% series of matlab commands in a file.
x = [1:10]
mean(x)

Function M-files Contain a function definition line and can accept input arguments and
return output arguments, and their internal variables are local to the function (unless
declared global). Syntax requires the first line to be of form:

function [out1, …, outN] = func_name(in1, …, inN)

Example: stats_wrapper.m
function [mean_x, var_x] = stats_wrapper(x)
%stats_wrapper.m
%computes the mean and variance of array x
mean_x = mean(x);
var_x = var(x);

Example usage:
>> [m,v]= stats_wrapper([1,2,3,4,5])
m =
3
v =
2.5000

Statistics in Matlab

Examples:

Some CDF, PDF, Inverse functions, Random number generators

normcdf Normal (Gaussian) cdf given value and parameters
poisscdf Poisson cdf given value and parameters
binopdf Binomial pdf given value and parameters
geopdf Geometric pdf given value and parameters
norminv Normal (Gaussian) critical values given p and parameters
poissinv Poisson critical values given p and parameters.
normrnd Normal (Gaussian) random numbers given parameters
poissrnd Poisson random numbers given parameters.

Some Hypothesis Tests

ranksum Wilcoxon rank sum test
signrank Wilcoxon signed rank test
signtest Sign test for paired samples
ttest One sample t-test
ttest2 Two sample t-test
ztest Z-test

help function_name

Best way to know how to correctly use built-in function and understand what it is
doing.

Sources:

1. Highham, D.J., and Higham, N.J. Matlab Guide. SIAM, Philadelphia, 2000.
2. Martinez, W.L., and Martinez, A.R. Appendix A, Computational Statistics Handbook With Matlab.
Chapman&Hall/CRC, New York, 2002.

Exercises:

Generate values from a binomial distribution

% Generate 10,000 random values from a binomial distribution and store in row vector
% empirical_bino. Use help to figure out input values for binornd.

>>empirical_bino = binornd(100,1/2,1,10000);

%Check that the mean and variance are close to that of the distribution from which it was
% generated.

>> mean(empirical_bino)
>> var(empirical_bino)

% Since binomial with p=1/2 is symmetric, check that median is also near true mean.

>> median(empirical_bino)

% Check out the distribution of the values in empirical_bino by plotting the histogram.
% Default number of bins is 10.

>>hist(empirical_bino)

% Use hold on to draw/trace plot of the distribution over the histogram.

>>[frequency, bins] = hist(empirical_bino);
>>hold on;
>>plot(bins, frequency, ’b*’); %use blue asterisk
>>xlabel(’bins’);
>>ylabel(’counts’);
>>title(’Simulated distribution’);
>>binsize=bins(2)-bins(1);
>>plot(0:100, 10000*binsize*binopdf(0:100, 100, 1/2),’r’);

What does it look like?

% Working with the cdf
% Get the probability that values from B(0,1) are less than or equal to the mean
% of the values in empirical_bino. Do the same for the median.

% First, check what we know
>> binocdf(50,100,1/2)

>> pmean = binocdf(mean(empirical_bino), 100,1/2)
>> pmedian = binocdf(median(empirical_bino), 100,1/2)

% Use the cdf to get back the critical values
% corresponding to those probability cutoffs

% First, check what we know
>> binoinv(0.5, 100,1/2)
>> binoinv(pmean, 100,1/2)
>> binoinv(pmedian, 100,1/2)

% Plot the cdf of empirical_bino
% Need to sort the values in empirical_bino from low to high and
% get the corresponding probability Px = P(X<=x) for each value in the
% array according to the theoretical distribution.

>> Px = binocdf(sort(empirical_bino), 100,1/2);

% Use Figure to create a new window

>>figure;

% Plot the sorted values of empirical_bino on x-axis and
% corresponding theoretical probabilities on y-axis.

>>plot(sort(empirical_bino), Px)
>>xlabel(’x’)
>>ylabel(’P_x’);
>>title(’cdf of empirical bino’);

Odds and Ends

%because we can let us practice file i/o with pmean
>> save pmean_file pmean –ascii
>> load pmean_file
>> pmean_file
>> delete pmean_file

Function example
Create simple function called sim_bino.m that plots the distribution of m values generated
from a binomial distribution with parameters n and p and returns the mean and variance
of the observed distribution

% Calls sim_bino with parameters n=100, p=1, m=100000 and saves plot as test.png
% Note that the character string ‘test’ is in single quotes

>>[obs_mean, obs_var] = sim_bino(100,1/2,10000, ’test’)

File: sim_bino.m

function [obs_mean, obs_var] = sim_bino(n, p, m, plotname)
%sim_bino.m
%----------------
% Simple function that plots distribution of m values from a binomial distribution with
% parameters n and p and saves this plot in PNG as ‘plotname’ in the current directory.

empirical_bino = binornd(n, p, 1, m);
figure;
hist(empirical_bino);
[frequency, bins] = hist(empirical_bino);
hold on;
plot(bins, frequency, ’b-*’); %use blue line and asterisk
xlabel(’bins’);
ylabel(’counts’);
title(’Simulated distribution’);

%save plot as plotname.png
print(gcf, '-dpng', '-r0',plotname);

obs_mean = mean(empirical_bino);
obs_var = var(empirical_bino);

Prev Next