0% found this document useful (0 votes)
21 views31 pages

Matlab-Slides Cambridge

matlab-slides Cambridge

Uploaded by

Bob
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views31 pages

Matlab-Slides Cambridge

matlab-slides Cambridge

Uploaded by

Bob
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 31

MathWorks Logo

Introduction to MATLAB
Markus Kuhn

Computer Laboratory, University of Cambridge

https://www.cl.cam.ac.uk/teaching/1920/TeX+MATLAB/

matlab-slides.pdf 2019-10-05 17:41 d4e9c33 1 / 21


What is MATLAB

I high-level language (garbage collecting, var-len structures)


I BASIC-like syntax, with elements from C, GUI IDE
I basic data type: 2- or 3-dimensional floating-point matrix
I most operators and functions work on entire matrices
⇒ hardly ever necessary to write out loops
I uses internally highly optimized numerics libraries
(BLAS, LAPACK, FFTW)
I comprehensive toolboxes for easy access to standard algorithms from
many fields: statistics, machine learning, image processing, signal
processing, neural networks, wavelets, communications systems
I very simple I/O for many data/multimedia file formats
I popular for experimental/rapid-prototype number crunching
I widely used as a visualization and teaching tool

2 / 21
What MATLAB is not

I not a computer algebra system


I not a strong general purpose programming language
• limited support for other data structures
• few software-engineering features;
typical MATLAB programs are only a few lines long
• not well-suited for teaching OOP
• limited GUI features
I not a high-performance language (but fast matrix operators)
got better since introduction of JIT compiler (JVM)
I not freely available (but local campus licence)

3 / 21
Open-source MATLAB alternatives
Similar to MATLAB, subset compatible: GNU Octave, SciLab, FreeMat
Other high-level languages for technical computing:
I R – focus on statistics and plotting
https://www.r-project.org/
I Python – a full-featured programming language. Modules:
• numpy – numerical arrays, fast linear algebra
• matplotlib – MATLAB-like plotting functions
https://matplotlib.org/
• SciPy – scientific computing, Pandas – data analysis, etc.
I Julia – modern, fast, full-featured, compiled, interactive language
https://julialang.org/
• MATLAB-inspired syntax (especially for arrays)
• combines dynamic and static type systems, multiple dispatch
• LLVM backend, can also call C, C++, Python, R, Fortran functions
• LISP-like metaprogramming, rich flexible type system
I others: LuaJIT (SciLua), Perl Data Language (PDL), OCaml (Owl)
Jupyter is a popular browser-based notebook environment for recording
and presenting experiments in Julia, Python, R, . . .
4 / 21
Local availability
MATLAB is installed and ready to use on
I Intel Lab, etc.: MCS Windows
I Intel Lab, etc.: MCS Linux (/usr/bin/matlab)
I CL MCS Linux server: ssh -X linux.cl.ds.cam.ac.uk
I MCS Linux server: ssh -X linux.ds.cam.ac.uk
I Computer Laboratory managed Linux PCs
cl-matlab -> /usr/groups/matlab/current/bin/matlab

Campus license (666637) allows installation on staff/student home PCs


(Linux, macOS, Windows):
I https://uk.mathworks.com/academia/tah-portal/
the-university-of-cambridge-666637.html
I Now (since 2018) includes full suite of ≈ 180 toolboxes: Statistics
and Machine Learning, Signal Processing, Image Processing, Image
Acquisition, Bioinformatics, Control Systems, Wavelets, Deep
Learning, Audio System, GPU Coder, Instrument Control, RF, . . .
I Installation requires setting up a https://uk.mathworks.com/
account with your @cam.ac.uk email address.
The older Computer Laboratory license (136605) was replaced in 2018 by the University one.
5 / 21
Documentation

I Full documentation built in: start matlab then type


• doc – to browse built-in hypertext manual
• doc command – to jump to a specific manual page (e.g. plot)
• help command – to show plain-text summary of a command
I Read first: doc → MATLAB → Getting Started
I Tutorial videos:
https://uk.mathworks.com/videos.html
I Documentation also available online (HTML and PDF):
• https://uk.mathworks.com/help/matlab/
• https://uk.mathworks.com/help/ – toolboxes

Locally installed MATLAB may be half a year behind the latest release. If you spot problems with
the MCS MATLAB installation, please do let the lecturer know (→ [email protected]).

6 / 21
MATLAB matrices (1)

Generate a “magic square” with equal row/column/diagonal sums and


assign the resulting 3 × 3 matrix to variable a:
>> a = magic(3)
a =
8 1 6
3 5 7
4 9 2
Assignments and subroutine calls normally end with a semicolon.
Without, MATLAB will print each result. Useful for debugging!
Results from functions not called inside an expression are assigned to the
default variable ans.
Type help magic for the manual page of this library function.

7 / 21
MATLAB matrices (2)

Colon generates number sequence: Specify step size with second colon:
>> 11:14 >> 1:3:12
ans = ans =
11 12 13 14 1 4 7 10

>> -1:1 >> 4:-1:1


ans = ans =
-1 0 1 4 3 2 1

>> 3:0 >> 3:-0.5:2


ans = ans =
Empty matrix: 1-by-0 3.0000 2.5000 2.0000

Single matrix cell: a(2,3) == 7. Vectors as indices select several rows and
columns. When used inside a matrix index, the variable end provides the
highest index value: a(end, end-1) == 9. Using just “:” is equivalent to
“1:end” and can be used to select an entire row or column.

8 / 21
MATLAB matrices (3)

Select rows, columns and Matrices can also be accessed as a


submatrices of a: 1-dimensional vector:
>> a(1:5)
>> a(1,:) ans =
ans = 8 3 4 1 5
8 1 6
>> a(6:end)
>> a(:,1) ans =
ans = 9 6 7 2
8
3 >> b = a(1:4:9)
4 ans =
8 5 2
>> a(2:3,1:2)
ans = >> size(b)
3 5 ans =
4 9 1 3

9 / 21
MATLAB matrices (4)

Use [ ] to build new matrices, where , or space as a delimiter joins


submatrices horizontally and ; joins them vertically.

>> c = [2 7; 3 1] Mask matrix elements:


c =
2 7 >> find(a > 5)
3 1 ans =
>> d = [a(:,end) a(1,:)'] 1
d = 6
6 8 7
7 1 8
2 6 >> a(find(a > 5)) = 0
>> e = [zeros(1,3); a(2,:)] a =
e = 0 1 0
0 0 0 3 5 0
3 5 7 4 0 2

10 / 21
Review: matrix multiplication

   
• • •   • • • •

 • • • 
 • • • • 
 • • • • 


 • • • 
 ·  • • • •  = 
 • • • • 

 • • •  • • • •  • • • • 
• • • • • • •

Each element of the matrix product is the scalar product of


the corresponding row in the first factor and
the corresponding column in the second factor

11 / 21
Review: matrix multiplication

 
• • • •
 • • • • 
• • • •
·
   
• • • • • • •

 • • • 


 • • • • 


 • • • 
 = 
 • • • • 

 • • •   • • • • 
• • • • • • •

Each element of the matrix product is the scalar product of


the corresponding row in the first factor and
the corresponding column in the second factor

11 / 21
Review: matrix multiplication

 
• • • •
 • • • • 
• • • •
· k
   
• • • • • • •

 • • • 


 • • • • 


 • • • 


 • • • • 

 • • •   • • • • 
• • • • • • •

Each element of the matrix product is the scalar product of


the corresponding row in the first factor and
the corresponding column in the second factor

11 / 21
Review: matrix multiplication

 
• • • •
 • • • • 
• • • •
· k
   
• • • • • • •

 • • • 


 • • • • 


 • • • 


 • • • • 

 • • •   • • • • 
• • • • • • •

Each element of the matrix product is the scalar product of


the corresponding row in the first factor and
the corresponding column in the second factor

11 / 21
Review: matrix multiplication

 
• • • •
 • • • • 
• • • •
· k
   
• • • • • • •

 • • • 


 • • • • 


 • • • 


 • • • • 

 • • •   • • • • 
• • • • • • •

Each element of the matrix product is the scalar product of


the corresponding row in the first factor and
the corresponding column in the second factor

11 / 21
Review: matrix multiplication

 
• • • •
 • • • • 
• • • •
· k
   
• • • • • • •

 • • • 


 • • • • 


 • • • 


 • • • • 

 • • •   • • • • 
• • • • • • •

Each element of the matrix product is the scalar product of


the corresponding row in the first factor and
the corresponding column in the second factor

11 / 21
Review: inner and outer product of vectors

Special cases of matrix multiplication

 

  • 
• • • • ·
 • =

Row vector times column vector:

12 / 21
Review: inner and outer product of vectors

Special cases of matrix multiplication

 

  •  
• • • • ·
 • =
 • = •

Row vector times column vector:

12 / 21
Review: inner and outer product of vectors

Special cases of matrix multiplication

 

  •  
• • • • ·
 • =
 • = •

Row vector times column vector: scalar product, dot product

12 / 21
Review: inner and outer product of vectors

Special cases of matrix multiplication

 

  •  
• • • • ·
 • =
 • = •

Row vector times column vector: scalar product, dot product


 

 •  
 ·
 •  • • • •

Column vector times row vector:

12 / 21
Review: inner and outer product of vectors

Special cases of matrix multiplication

 

  •  
• • • • ·
 • =
 • = •

Row vector times column vector: scalar product, dot product


   
• • • • •
 •    • • • • 
 ·
 •  • • • • =
 •

• • • 
• • • • •

Column vector times row vector:

12 / 21
Review: inner and outer product of vectors

Special cases of matrix multiplication

 

  •  
• • • • ·
 • =
 • = •

Row vector times column vector: scalar product, dot product


   
• • • • •
 •    • • • • 
 ·
 •  • • • • =
 •

• • • 
• • • • •

Column vector times row vector: matrix of all pair-wise products

12 / 21
MATLAB matrices (5)

Operators on scalars and matrices: Inner and outer vector product:


>> [2 3 5] * [1 7 11]'
>> [1 1; 1 0] * [2 3]' ans =
ans = 78
5 >> [2 3 5]' * [1 7 11]
2 ans =
>> [1 2 3] .* [10 10 15] 2 14 22
ans = 3 21 33
10 20 45 5 35 55


The imaginary unit vector −1 is available as both i and j, and
matrices can be complex.
Related functions: real, imag, conj, exp, abs, angle

13 / 21
Plotting

20-point raised cosine 1


1
real
0.8 imaginary

0.8
0.6

0.6 0.4

0.2
0.4
0

0.2 -0.2

-0.4
0 0 2 4 6 8 10
0 5 10 15 20

x = 0:20; t = 0:0.1:10;
y = 0.5 - 0.5*cos(2*pi * x/20); x = exp(t * (j - 1/3));
stem(x, y); plot(t, real(x), t, imag(x));
title('20-point raised cosine'); grid; legend('real', 'imaginary')

Plotting functions plot, semilogx, semilogy, loglog all expect a pair of


vectors for each curve, with x and y coordinates, respectively.
Use saveas(gcf, 'plot2.eps') to save current figure as graphics file.

14 / 21
2D plotting

-20

1
-15

0.5
-10

0 -5

-0.5 0
20
20
0 10 5
0
-10
-20 -20
10

15
xl = -20:0.3:20;
yl = -20:0.3:20;
[x,y] = meshgrid(xl, yl); 20
-20 -10 0 10 20
r = sqrt(x.^2 + y.^2);
s = sin(r) ./ r; s(find(r==0)) = 1; imagesc(xl, yl, s, [-1 1]);
plot3(x, y, s); colormap(gray);
grid on; set(gca, 'DataAspectRatio', [1 1 1]);

15 / 21
Some common functions and operators

*, ^ imread, imwrite, image,


matrix multiplication, exponentiation imagesc, colormap
/, \, inv bitmap image I/O
A/B = AB −1 , A\B = A−1 B, A−1 plot, semilog{x,y}, loglog
+, -, .*, ./, .^ 2D curve plotting
element-wise add/sub/mul/div/exp
conv, conv2, xcorr
==, ~=, <, >, <=, >= 1D/2D convolution,
relations result in element-wise 0/1
cross/auto-correlation sequence
length, size
size of vectors and matrices fft, ifft, fft2
zeros, ones, eye, diag discrete Fourier transform
all-0, all-1, identity, diag. matrices sum, prod, min, max
xlim, ylim, zlim sum up rows or columns
set plot axes ranges cumsum, cumprod, diff
xlabel, ylabel, zlabel cumulative sum or product,
label plot axes differentiate row/column
audioread, audiowrite, sound find
audio I/O list non-zero indices
csvread, csvwrite figure, saveas
comma-separated-value I/O open new figure, save figure

16 / 21
Functions and m-files

To define a new function, for example decibel(x) = 10x/20 , write into a


file decibel.m the lines
function f = decibel(x)
% DECIBEL(X) converts a decibel figure X into a factor
f = 10 .^ (x ./ 20);
Only the function that has the same name as the m-file in which it is
defined can be called from outside the file; all other functions are only
visible inside the file. The function keyword sets the variable whose
value will be returned and lists the parameter variables.
The m-file must be in the current directory (cd) or MATLAB’s search
path (path) to become accessible.
Use edit db to edit the m-file, help db to show the first comment
lines and type db to show its source text.
M-files can also contain just sequences of statements instead of a
function definition. These are called simply by typing their name.

17 / 21
Example: generating an audio illusion

Generate an audio file with 12 sine tones of apparently continuously


exponentially increasing frequency, which never leave the frequency range
300–3400 Hz. Do this by letting them wrap around the frequency interval
and reduce their volume near the interval boundaries based on a
raised-cosine curve applied to the logarithm of the frequency.
First produce a 2 s long waveform in which each tone raises 1/12 of the
frequency range, then concatenate that into a 60 s long 16-bit WAV file,
mono, with 16 kHz sampling rate. Avoid phase jumps.
Parameters:
fs = 16000; % sampling frequency [Hz]
d = 2; % time after which waveform repeats [s]
n = 12; % number of tones
fmin = 300; % lowest frequency
fmax = 3400; % highest frequency

18 / 21
Spectrogram of the first 6 s:
-40
3.5

3 -60

Power/frequency (dB/Hz)
2.5
Frequency (kHz)

-80

2
-100
1.5
-120
1

0.5 -140

0
1 2 3 4 5
Time (secs)

19 / 21
Example solution:
t = 0:1/fs:d-1/fs; % timestamps for each sample point
% normalized logarithm of frequency of each tone (row)
% for each sample point (column), all rising linearly
% from 0 to 1, then wrap around back to 0
l = mod(((0:n-1)/n)' * ones(1, fs*d) + ones(n,1) * (t/(d*n)), 1);
f = fmin * (fmax/fmin) .^ l; % freq. for each tone and sample
p = 2*pi * cumsum(f, 2) / fs; % phase for each tone and sample
% make last column a multiple of 2*pi for phase continuity
p = diag((2*pi*floor(p(:,end)/(2*pi))) ./ p(:,end)) * p;
s = sin(p); % sine value for each tone and sample
% mixing amplitudes from raised-cosine curve over frequency
a = 0.5 - 0.5 * cos(2*pi * l);
w = sum(s .* a)/n; % mix tones together, normalize to [-1, +1]

w = repmat(w, 1, 3); % repeat waveform 3x


spectrogram(w, 2048, 1800, 2048, fs, 'yaxis'); ylim([0 fmax/1e3*1.1]) % plot
w = repmat(w, 1, 20); % repeat waveform 20x
audiowrite('ladder.wav', w, fs, 'BitsPerSample', 16); % make audio file

A variant of this audio effect, where each tone is exactly one octave (factor 2 in frequency) from
the next, is known as the Shepard–Risset glissando.
What changes to the parameters would produce that?

20 / 21
MATLAB, Julia, NumPy: comparative cheat sheet
MATLAB Julia NumPy

vector size (1,n) [1 2 3] [1 2 3] np.array([1, 2, 3]).reshape(1, 3)


vector size (n,1) [1; 2; 3] [1 2 3]’ np.array([1, 2, 3]).reshape(3, 1)
vector size (n) n/a [1, 2, 3] np.array([1, 2, 3])
j to n step k j:k:n j:k:n np.arange(j, n+1, k)
matrix [1 2; 3 4] [1 2; 3 4] np.array([[1, 2], [3, 4]])
0 matrix zeros(2, 2) zeros(2, 2) np.zeros((2, 2))
1 matrix ones(2, 2) ones(2, 2) np.ones((2, 2))
identity matrix eye(2, 2) I np.eye(2)
diagonal matrix diag([1 2 3]) Diagonal([1, 2, 3]) np.diag([1, 2, 3])
transpose A.’ transpose(A) A.T
complex conj. transpose A’ A’ A.conj()
concat hor. [[1 2] [1 2]] [[1 2] [1 2]] B = np.array([1, 2])
np.hstack((B, B))
matrix to vector A(:) A[:] A.flatten()
flip left/right fliplr(A) reverse(A,dims=2) np.fliplr(A)
broadcast a function f=@(x) x.^2; f(x)=x^2; f.(x) def f(x):
f(x) return x**2
f(x)
element A2,2 A(2, 2) A[2, 2] A[1, 1]
rows 1 to 4 A(1:4, :) A[1:4, :] A[0:4, :]
element-wise multipl. A .* B A .* B A*B
matrix multiplication A*B A*B A@B
...
https://cheatsheets.quantecon.org/
21 / 21

You might also like