# 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 puttingan array of indices instead of ‘:’ ). |

A(:, i ) |
i-th column of a matrix A, all rows (Can
select certain rows also byputting 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 |