0% found this document useful (0 votes)
32 views

Advancedmatlabtutorialw2012 120903013858 Phpapp02

Uploaded by

fut
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)
32 views

Advancedmatlabtutorialw2012 120903013858 Phpapp02

Uploaded by

fut
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/ 133

Raymond Phan, Ph.D.

Candidate
Dept. of Electrical & Computer Engineering – Ryerson University
Multimedia and Distributed Computing Research Laboratory
rphan@ee.ryerson.ca

Monday, February 6th, 2012,


Eric Palin Hall (EPH) – Room 201
4 p.m. – 6 p.m.
Tutorial Topics – (1)
 1st Part of the Tutorial
 Introduction
 What MATLAB is (briefly) and where can I get it?
 Review of array and matrix operations
 Basic Math Operations
 Matrix Algebra vs. Point-by-Point Operations
 Modifying and extracting a portion of a matrix
 Creating and working with dynamic arrays
 Creating Function Handlers
 Creating equations of single or multiple variables
 Not that inline crap that you learned!
Tutorial Topics – (2)
 Plotting Graphs
 Creating an array of numbers following a pattern
 Plotting 2D graphs properly using function handlers
 Plotting multiple separate graphs on the same window
 Using MATLAB syntax to customize plots
 Plotting 3D plots: Surface and Mesh plots
 Some useful MATLAB commands and constructs
 Creating cell arrays
 Review of logical operators (AND, OR, NOT)
 The find command
 Locating values in an array or matrix meeting certain criteria

 Modifying matrices using logical operators


Tutorial Topics – (3)
 Creating Transfer Functions
 Both polynomial form and zero-pole-gain (ZPK) format

 Minimum Realizations

 Calculating the impulse and step response


 Finding the roots of equations
 Polynomial equations

 Non-linear equations

 Evaluating a polynomial equation at given points


 Using convolution to multiply polynomial equations
 Partial Fraction Decomposition
 Create a matrix by using copies of a smaller matrix
 Converting an array and reshaping it into a matrix
Tutorial Topics – (4)
 2nd Part of the Tutorial:
 Advanced Mathematical Analysis
 Calculating Derivatives and Integrals Analytically using the
Symbolic Math Toolbox
 Using MATLAB to calculate with respect to “x”

 Evaluating derivatives at points

 Calculating the definite integral

 Finding the line of best fit via regression


 Linear regression, parabolic regression, etc.

 More commonly known as polynomial interpolation

 Calculating the area under a curve when the function is unknown,


but data points are known
 Calculating via trapezoidal rule
Tutorial Topics – (5)
 Numerical Solutions to Differential Equations
 Output is a set of points that is the solution at different points
in time  Not the actual equation
 Sorting arrays
Tutorial Topics – (1)
 1st Hour: 4:10 p.m. – 5:00 p.m.
 Introduction
 What MATLAB is (briefly) and where can I get it?
 Review of array and matrix operations
 Basic Math Operations
 Matrix Algebra vs. Point-by-Point Operations
 Modifying and extracting a portion of a matrix
 Creating and working with dynamic arrays
 Creating Function Handlers
 Creating equations of single or multiple variables
 Not that inline crap that you learned!
Introduction – (1)
 MATLAB  Stands for MATrix LABoratory
 Created by Cleve Moler @ Stanford U. in 1970
 Why? Makes linear algebra, numerical analysis and
optimization a lot easier
 MATLAB is a dynamically typed language
 Means that you do not have to declare any variables
 All you need to do is initialize them and they are created
 MATLAB treats all variables as matrices
 Scalar – 1 x 1 matrix. Vector – 1 x N or N x 1 matrix
 Why? Makes calculations a lot faster (will see later)
Introduction – (2)
 How can I get and/or use MATLAB?  3 ways:
 1) Find it on any of the ELCE departmental computers
 Log in to your account, go to Applications  Math 
MATLAB R2010b
 2) Use any Ryerson computer on to the ACS network
 Log in with your Matrix ID and Password, then go to Start 
MATLAB R2011
 3) Install it on your own laptop / computer
 Go to http://www.ee.ryerson.ca/matlab for more details
 You must be on the Ryerson network to sign up for an account
 After, you can download MATLAB from anywhere
Introduction – (3)
 A few things before we start
 This is an advanced tutorial
 I assume you have basic knowledge in MATLAB
 I will cover some concepts seen in 2nd year Math courses
 Don’t worry, a lot of you may have forgotten, or have not
seen this stuff before, and I will give brief intros
 If you have no exposure to MATLAB, then as long as you
have some programming experience, you will be able to
understand the basics part
 For each MATLAB line I show, assume I push ENTER
immediately after
 Enter the commands in the MATLAB Command Prompt
 The main window that opens when you open up MATLAB
 Push ENTER after each command you type in to execute
Tutorial Topics – (1)
 1st Hour: 4:10 p.m. – 5:00 p.m.
 Introduction
 What MATLAB is (briefly) and where can I get it?
 Review of array and matrix operations
 Basic Math Operations
 Matrix Algebra vs. Point-by-Point Operations
 Modifying and extracting a portion of a matrix
 Creating and working with dynamic arrays
 Creating Function Handlers
 Creating equations of single or multiple variables
 Not that inline crap that you learned!
Review: Array & Matrix Ops (1)
 Creating arrays:
 No need to allocate memory  Easy to create with the
numbers you want  Use square braces in between []
array = [1 5 8 7];  Row Vector
array = [1;5;8;7];  Column Vector
 Use a space to separate each element
 Use a semi-colon (;) to go down to the next row
array = [1 5 8 7]’;  Also a column vector
 ‘ means take the transpose (interchange rows & columns)
 After, MATLAB creates an array automatically, with the
values you specified, stored in MATLAB as array
Review: Array & Matrix Ops (2)
 Accessing elements in an array
 Use the name of the array, with round brackets ()
 Inside the brackets, specify the position of where you
want to access
 Remember, MATLAB starts at index 1, not 0 like in C
 Examples  array = [1 5 8 7];
 num = array(2);  num = 5
 num = array(4);  num = 7
 Accessing a range of values  Use colon (:) operator
 Style: val = array(begin:end);
 Begin & end are the starting & ending indices to access
Review: Array & Matrix Ops (3)
 Examples  array = [1 5 8 7];
 val = array(2:4);
 val  3 element array, containing elements 2 to 4 of array
 This is equivalent to val = [5 8 7];
 val = array(1:2);
 val  2 element array, containing elements 1 and 2 of array
 This is equivalent to val = [1 5];
 We can also access specific multiple elements
 val = array([1 4 2 3]);
 val  A 4 element array: 1st element is from index 1 of array,
2nd element is from index 4 of array, etc.
 This is equivalent to val = [1 7 5 8];
Review: Array & Matrix Ops (4)
 val = array([1 3 2]);
 val  A 3 element array: 1st element is from index 1 of
array, 2nd element is from index 3 of array, etc.
 This is equivalent to val = [1 8 5];
 Last thing about arrays
 To copy an entire array over, simply set another variable
equal to the array you want to copy
 i.e. array2 = array;
 This is equivalent to array2 = [1 5 8 7];
Review: Array & Matrix Ops (5)
 Let’s move onto matrices
 To create a matrix, very much like creating arrays
 Use square braces [], then use the numbers you want!
 Use spaces to separate between the columns
 Use semicolons (;) to go to each row
 Example:
M = [1 2 3 4;
M= 5 6 7 8;
9 10 11 12;
13 14 15 16];
Review: Array & Matrix Ops (6)
 How to access an element in a matrix
 Use the name of the matrix, with round braces ()
 We use two numbers, where each number references a
dimension in the matrix  Separate them by a comma
 1st number is the row, 2nd number is the column
 Examples:
B = M(2,3);  B = 7; 2nd row, 3rd col.
B = M(3,4);  B = 12; 3rd row, 4th col. M =
B = M(4,2);  B = 14; 4th row, 2nd col.
B = M(1,3);  B = 3; 1st row, 3rd col.
Review: Array & Matrix Ops (7)
 To access a range of values, use the colon operator just
like we did for arrays, but now use them for each
dimension
 Examples: M=
 B = M(1:3,3:4);  Rows 1-3, Cols 3-4
 This is equivalent to B = [3 4; 7 8; 11 12];
 B = M(3:4,3:4);  Rows 3-4, Cols 3-4
 This is equivalent to B = [11 12; 15 16];
 B = M(1,1:3);  Row 1, Cols 1-3
 This is equivalent to B = [1 2 3];
 B = M(3:4,2);  Row 3-4, Col 2
 This is equivalent to B = [10;14];
Review: Array & Matrix Ops (8)
 Last thing for accessing  Using : by itself
 Using : for any dimension means to access all values
 Examples:
 A = M(1:2,:);  Rows 1-2, All Cols. M =
 Equal to A = [1 2 3 4; 5 6 7 8];
 A = M(2,:);  Row 2, All Cols.
 This is equivalent to A = [5 6 7 8];
 A = M(:,3);  All Rows, Col 3
 This is equivalent to A = [3;7;11;15];
 A = M(:,1:3)  All Rows, Cols. 1 – 3
 Equal to A = [1 2 3; 5 6 7; 9 10 11; 13 14 15];
 A = M(:,:); or A = M;  Grab the entire matrix
Review: Array & Matrix Ops (9)
 Let’s get onto some basic math operations!
 Let’s assume the following:
 A and B are vectors / arrays, or matrices of compatible
dimensions
 We assume that A and B can be properly added, subtracted,
multiplied and divided together
 Also, assume that n is a scalar number
 Here’s a table that provides a good summary of all of
the basic operations you can perform on vectors /
array, and matrices
Review: Array & Matrix Ops (10)

 Let’s look at addition and subtraction first


 With addition or subtraction, A & B must be same size
 The result will be a matrix of the same size, where each
element is added or subtracted with its corresponding
location
 For vectors, we do this for each corresponding element
Review: Array & Matrix Ops (11)
 Example:
 A = [1 2; 3 4];
 B = [5 6; 7 8];
 E = A + B;
 This is equivalent to E = [6 8; 10 12];
 F = A – B;
 This is equivalent to F = [-4 -4; -4 -4];
 G = C + D;
 This is equivalent to G = [5 7 9];
 H = C – D;
 This is equivalent to H = [-3 -3 -3];
Review: Array & Matrix Ops (12)

 * here means matrix multiplication


 Division is a bit more complicated
 We have left division and right division
 Left Division: A-1B, and Right Division: AB-1
 ’ means transpose, as we saw earlier
 A^n means to multiply a matrix n times
Review: Array & Matrix Ops (13)
 Examples:
 C = A * B;
 This is equivalent to C = [19 22; 43 50];
 D = A \ B;
 This is equivalent to D = [-3 -4; 4 5];
 E = A / B;
 This is equivalent to E = [-3 -2; 2 -1];
 F = A^2;
 This is equivalent to F = [7 10; 15 22];
 G = B^3;
 This is equivalent to G = [881 1026; 1197 1394];
Review: Array & Matrix Ops (14)
 Special case: +,-,* or / every element in a vector or
matrix by a constant number
 You use an operation, with the constant number
 Examples: A = [1 2; 3 4]; B = [5 6 7 8];
 C = 2*A;
 This is equivalent to C = [2 4; 6 8];
 D = B/3;
 This is equivalent to D = [1.6666 2 2.3333 2.6666];
 E = A-2;
 This is equivalent to E = [-1 0; 1 2];
 F = B+4;
 This is equivalent to F = [9 10 11 12];
Review: Array & Matrix Ops (15)
 So far, we’ve done operations with matrix algebra
 MATLAB also has called point-by-point operations
 Point-by-point operations are applied to
multiplication (*), division (\,/), & exponentiation (^)
 To use point-by-point operators, you put a dot (.)
before any of the operations above: .* or ./ or .\ or .^
 Point-by-point operators work by taking the operation
and performing it on corresponding elements only
 The 1st element of A, is *, /, \ or * with 1st element of
 ...don’t get it? Here’s an example
Review: Array & Matrix Ops (16)
 Examples:
 C = A * B;
 This is equivalent to C = [19 22; 43 50];
 D = A .* B;
 This is equivalent to D = [5 12; 21 32];
 E = A \ B;
 This is equivalent to E = [-3 -4; 4 5];
 F = A .\ B;
 This is equivalent to F = [5 3; 2.3333 2];
 Same as taking every element from B and dividing by its
corresponding element in A
Review: Array & Matrix Ops (17)
 Examples:
 G = A / B;
 This is equivalent to G = [-3 -2; 2 -1];
 H = A ./ B;
 This is equivalent to H = [0.2 0.3333; 0.4286 0.5];
 Same as taking every element from A and dividing by its
corresponding element in B
 I = A^2;
 This is equivalent to I = [7 10; 15 22];
 J = A.^2;
 This is equivalent to J = [1 4; 9 16];
Review: Array & Matrix Ops (18)
 Now on to modifying elements in arrays and matrices
 Do same thing with accessing elements or in groups
 Flip the order of what’s on which side of the equals sign
 Examples, using the A matrix previously:
 A(3,4) = 7;  Store 7 in 3rd row, 4th col
 A(1:2,3:4) = [5 6; 7 8];
 Store this 2 x 2 matrix in Rows 1-2, and Cols 3-4
 A(2,:) = [8 19 2 20];
 Store this row vector in Row 2

 A(:,3) = [5;4;3;2];
 Store this column vector in Col 3

 A(1:2,:) = 5;  Set Row 1-2 and all Cols. to 5


Review: Array & Matrix Ops (19)
 Last thing for our review: Dynamic Arrays
 Good for not knowing size before hand
 We can create arrays that grow in size
 We can extend the size and add new elements
 You simply set a variable to a set of square braces []
 array = [];
 After, you just assign numbers to the array
 array(1:4) = 5;
 array(5:7) = [8 6 8];
 array(end+1) = 7;  end goes to the end of array,
and +1 puts 7 after the end and extends the size by 1.
 Equivalent to array = [5 5 5 5 8 6 8 7];
Creating Function Handlers (1)
 We can use MATLAB to create complex equations
 These equations are in terms of whatever variable you
want: x, y, z, w, t, etc.
 We can create single variable, or multiple variables
 These are called function handlers
 Once we create function handlers, we simply supply
the function handlers with the values we want to
substitute into the variables
 The function handlers will evaluate the function at these
values, and give us outputs
Creating Function Handlers (2)
 To create function handlers, you use the @ sign, then
surround it with round braces ()
 In the braces, place the variables relevant to equation
 After, you then write out the equation in C style
 Make sure that all multiplication, division and
exponentiation operations are point-by-point
 Why? That way, we can supply a vector or matrix into
the function handler, and it’ll evaluate the function for
every element on its own, and send that to the output
 Built-in MATLAB functions like sin, cos, sqrt, etc. are
all function handlers too!
Creating Function Handlers (3)
 We don’t need to do point-by-point if we’re performing
these operations on constants
 Function Handler Examples:

 f = @(x) 5*sin(x) – x.^2 + 3;

 f = @(x) sqrt(x.^3 + exp(-2*x) – 5);

 g = @(x,y)(25 – x.^2 – y.^2);
  i is the imaginary variable
 h = @(w,t) cos(w.*t) + i*sin(w.*t);
Creating Function Handlers (4)
 We can also nest function handlers within other ones
 Examples:

 f = @(x) 2*x.^2 + 3;
 g = @(x,f) 2*x.*f(x-3) + 5*x;
 Make sure you specify f as a variable to function handler g
 To use function handlers, use them like any other
function in MATLAB, using how you named them
 You put in values that you want the function to be
evaluated at  Vectors / Arrays or Matrices
 Output: Same size as input  Function evaluated on
each element
Creating Function Handlers (5)
 Examples:
 A = [1 2; 3 4]; B = [2.5 6.7 9];

 f = @(x) 5*sin(x) – x.^2 + 3;


 g = @(x,y) 25 – x.^2 – y.^2;
 a = f(3);
 Equivalent to
 In MATLAB: a = -5.2944  sin is in radians

 b = f(A);
 Using same principle, we get:
b = [6.2074 3.5465; -5.2944 -16.7840];
 c = g(B,B-2);
 Using same principle, this is equivalent to:
c = [18.5 -41.98 -105];
Tutorial Topics – (2)
 Plotting Graphs
 Creating an array of numbers following a pattern
 Plotting 2D graphs properly using function handlers
 Plotting multiple separate graphs on the same window
 Using MATLAB syntax to customize plots
 Plotting 3D plots: Surface and Mesh plots

 Some useful MATLAB commands and constructs


 Creating structures and cell arrays
 Review of logical operators (AND, OR, NOT)
 The find command
 Locating values in an array or matrix meeting certain
criteria
 Finding minimum and maximum values
Plotting Graphs – (1)
 This is not properly taught in any courses that I’ve
TAed  Here to remedy this situation
 MATLAB makes it very easy to plot data, and makes
the graphs look visually pleasing
 The basic run through is this:
 (a) Provide an array of points for each set of axes
 (b) Run a function that plots things for you
 (c) Run a few more commands that customize the
appearance of the plot  grid, legend, axes labels
Plotting Graphs – (2)
 Let’s start with 2D plotting:
 Assuming that we have two variables, x and y and are
both the same size
 To produce the most basic graph in MATLAB that plots
y vs. x, you just do:
plot(x,y);
 Let’s start off with a basic example: y = x
 We need to generate x and y values first
 x = [1 2 3 4 5];
 y = [1 2 3 4 5]; or y = x;
 plot(x,y);... and we’ll get...
Plotting Graphs – (3)
Plotting Graphs – (4)
 This is great... but what if we wanted to generate a
large set of numbers?
 A pain to manually input all these points into an array!
 If the numbers follow a pattern then this is easy
 Use the following syntax:
 array = first : increment : last;

 first – Value to start at


 increment – step size
 last – Final value to stop
 Can also do array = first : last;
 Leaving the increment out defaults to a step size of 1
Plotting Graphs – (5)
 Examples:
 array = 0 : 2 : 10;
 Equivalent to array = [0 2 4 6 8 10];
 array = 3 : 3 : 30;
 Equivalent to array = [3 6 9 12 15 18 ... 30];
 array = 1 : 0.1 : 2.2;
 Equivalent to array = [1 1.1 1.2 1.3 ... 2.2];
 array = 3 : -1 : -3;
 Equivalent to array = [3 2 1 0 -1 -2 -3];
 array = 5 : 15;
 Equivalent to array = [5 6 7 8 ... 14 15];
Plotting Graphs – (6)
 Can also perform this using the linspace command
 array = linspace(first, last, N);
 array = linspace(first, last);
 The first style generates an array of size N, with equally
spaced points between first and last
 The second style generates an array of the default size of
100 equally spaced points between first and last
 For non-linear equations, try using logspace
 array = logspace(first, last, N);
 array = logspace(first, last);
 Same as linspace, but on a logarithmic scale instead
Plotting Graphs – (7)
 Let’s move to more advanced equations for plotting

 f = @(x) 5*sin(x) – x.^2 + 3;
 First, let’s generate our x points
 x = -5:0.01:5;
 y = f(x);
 plot(x,y);
 We use a step size of 0.01, because the plot command
draws graphs by “connecting the dots”
 The smaller the step size, the more accurate the plot is
 ... So! We get...
Plotting Graphs – (8)
Plotting Graphs – (9)
 To plot more than one graph on the same window, you
use the plot command by specifying pairs of x and y
arrays in the same command
 i.e. plot(x1,y1,x2,y2,...,xN,yN);
 Each pair of arrays generates a plot in a different colour
 Let’s try plotting 3 graphs on the same plot
 Using the previous example:
x = -5:0.01:5;
y = f(x);
y2 = 1 + f(x);  Shift up graph by 1
y3 = 2 + f(x);  Shift up graph by 2
plot(x,y,x,y2,x,y3);
Plotting Graphs – (10)
Plotting Graphs – (11)
 Now, we can customize the graph to make it look nice
 To label the x-axis, use the xlabel command
xlabel(‘Title’);
 Replace ‘Title’ with whatever you want for the x-axis
 For the y-axis, use the ylabel command
ylabel(‘Title’);
 Replace ‘Title’ with whatever you want for the y-axis
 To put a legend, use the legend command
legend(‘Graph1’,’Graph2’,’Graph3’...’);
 Change ‘Graph1’, ‘Graph2’, ... with the graphs’ names
 Caution: Label the graphs in the same order as how you
placed them in the plot command
Plotting Graphs – (12)
 To name the plot, use the title command
title(‘Title’);
 Change ‘Title’ to whatever you want to name the plot
 To add gridlines, use the grid command
 Using the same graph that we just plotted, we can do
the following  Ensure that graph window is still open
 xlabel(‘X’);
 ylabel(‘Y’);
 title(‘Three Graphs’);
 grid;
 legend(‘y=f(x)’,‘y=1+f(x)’,‘y=2+f(x)’);
Plotting Graphs – (13)
Plotting Graphs – (14)
 By default, MATLAB takes each pair of points in the
arrays and connects them  “connects the dots”
 Also has its own way of colouring each plot
 Is there a way that we can control this behaviour? Yes!
 When using the plot command, you specify arrays of x
and y points, with an additional 3rd parameter: A string
of up to 3 characters surrounded by single quotes
 plot(x,y,’cst’);
 For the 3rd parameter, the 1st character controls the colour
 The 2nd and optionally the 3rd character control the style of the
plot
Plotting Graphs – (15)
 Supported colours and their character codes:
 b – blue, g – green, r – red, c – cyan, m – magenta, y –
yellow, k – black
 Supported plot styles:
Plotting Graphs – (16)
 Examples:
 x = 0 : 10;
 y = x;
 plot(x,y,’g.’);
 Plots a green line with dots at each point
 plot(x,y,’bx’);
 Plots a blue line with an x at each point
 plot(x,y,’ko’);
 Plots a black line with circles at each point
 plot(x,y,’m.-’);
 Plots a magenta line with a solid line and a dot at each point
Plotting Graphs – (17)
 Like how we saw before, you can put multiple plots on
a single graph, each with their own colour and plot
styles with the following:
plot(x1, y1, ’line_style1’, x2, y2,
’line_style2’,..., xN, yN,
’line_styleN’);
 N is the number of plots you want to appear on the
single graph
 xi and yi are the points to the ith graph you want
plotted on the single graph
 line_stylei is the plot style and colour of that ith
graph
 We can also use xlabel, ylabel, legend,
grid to customize as well
Plotting Graphs – (18)
 Let’s say we wanted to plot multiple graphs in separate
plots on the same window
 We use the subplot command
 Command treats the window as having multiple slots
 Each slot takes in a graph
 How do we use the command?
subplot(m,n,p);
 m and n you need to know before hand
 These determine the number of rows (m) and columns (n) for
the amount of graphs you want
 p chooses which location in the window the plot should go to

 The order is from left to right, top to bottom


Plotting Graphs – (19)
 In order to properly use subplot, you must call this
function first
 After, you code the syntax to plot something normally
 Here’s a small example:
 To make a window that has 4 plots: 2 rows and 2 columns
 Do subplot(221) Specify the top left corner
 Code the syntax to plot normally. The plot will appear on the top left
 Do subplot(222) Specify the top right corner
 Code the syntax to plot normally. The plot will appear on the top
right
 Do subplot(223)  Specify the bottom left corner
 Code the syntax to plot normally. The plot will appear on bottom
left
 Do subplot(224)  Specify the bottom right corner
 Code the syntax to plot normally. The plot will appear on bottom
right
Plotting Graphs – (20)
 With this, let’s do another example
 Let’s make 4 graphs: 2 rows and 2 columns
 Each graph will have one plot.
 Let’s make each plot the following:
1. y1 = sin(x);
2. y2 = cos(x);
3. y3 = 3*x;
4. y4 = 6*x;
 Let’s make the range of the plot go from:
x = -10 : 0.1 : 10;… now what?
 Create a blank window, then start adding each graph
using the subplot command
 Customize a graph before moving to the next one
Plotting Graphs – (21)
x = -10:0.01:10;
y1=cos(x); y2=sin(x); y3=3*x; y4=6*x;
figure;  Generate blank window
subplot(2,2,1);  Top left corner
plot(x,y1);
xlabel(‘X’); ylabel(‘Y’); title(‘Plot 1’);
subplot(2,2,2);  Top right corner
plot(x,y2);
xlabel(‘X’); ylabel(‘Y’); title(‘Plot 2’);
Plotting Graphs – (22)
subplot(2,2,3);  Bottom left corner
plot(x,y3);
xlabel(‘X’); ylabel(‘Y’); title(‘Plot 3’);
subplot(2,2,4);  Bottom right corner
plot(x,y4);
xlabel(‘X’); ylabel(‘Y’); title(‘Plot 4’);
Plotting Graphs – (23)
Plotting Graphs – (24)
 One last thing before we move onto more advanced
stuff
 We can customize which values along the x or y axis we
want to display
 Use the set command
set(gca, ‘xtick’, array);
set(gca, ‘ytick’, array);
 gca  Get Current Axis
 array: The values we wish to display for either axis,
stored as an array
Plotting Graphs – (25)
 Example:
x = 0:2:10;
y = x;
plot(x,y);
set(gca,‘xtick’,0:2:10);
set(gca,’ytick’,0:10);
Plotting Graphs – (26)
 Let’s move onto 3D plots!
 MATLAB can draw 3D plots in a very nice way
 Here are the steps:
 1) Create a function header of two variables
 2) Figure out the range of x and y values you want, then
create a grid of these x and y points
 3) Use the function handler to create the output points
in the 3rd dimension (z)
 4) Use a function that plots this triplet of arrays in 3D
Plotting Graphs – (27)
 How do we generate a grid of x and y values?
 Use the meshgrid function
 This function will output two matrices, X and Y
 X contains what the x co-ordinates are in the grid of
points we want
 Y contains what the y co-ordinates are in the grid of
points we want
 You need to specify the range of x and y values we want to
plot
[X,Y] = meshgrid(x1:x2,y1:y2);
[X,Y] = meshgrid(x1:inc:x2,y1:inc:y2);
Plotting Graphs – (28)
 x1,x2 determines the beginning and ending x values
respectively
 y1,y2 determines the beginning and ending y values
respectively
 We can optionally specify inc which specifies the step
size, just like what we’ve seen earlier
 Example: [X,Y] = meshgrid(0:4,0:5);
 X: Range is from 0 to 4
 Y: Range is from 0 to 5
Plotting Graphs – (29)
X= Y=

0 1 2 3 4 0 0 0 0 0
0 1 2 3 4 1 1 1 1 1
0 1 2 3 4 2 2 2 2 2
0 1 2 3 4 3 3 3 3 3
0 1 2 3 4 4 4 4 4 4
0 1 2 3 4 5 5 5 5 5

 Top-left corner: X = 0, Y = 0
 Top-right corner: X = 4, Y = 0
 Middle: X = 2, Y = 2
 Each matching location for both the X and Y matrices
corresponds to the (x,y) location in Cartesian co-ordinates
Plotting Graphs – (30)
 Now, how do we create 3D plots? Use either the surf
or mesh commands
 surf(x,y,z);  The z values all have different
colours assigned to them and is a closed plot
 mesh(x,y,z);  The z values all have different
colours assigned to them, but only draws lines through
the points
 For each function, you specify a triplet of x, y and z
values of all the same size
 We can also customize the graph using the commands
seen previously
Plotting Graphs – (31)
 Example: Let’s plot the following function

f = @(x,y) x.*exp(-x.^2 – y.^2);


[X,Y] = meshgrid(-2:0.2:2,-2:0.2:2);
Z = f(X,Y);  X,Y: Range is from -2 to 2 in steps of 0.2
surf(X,Y,Z);  Previous line gets Z points & now plot
xlabel(‘x’); ylabel(‘y’); zlabel(‘z’);
figure;  Create a new window
mesh(X,Y,Z);  Place mesh graph in new window
xlabel(‘x’); ylabel(‘y’); zlabel(‘z’);
Plotting Graphs – (32)

surf plot mesh plot


Tutorial Topics – (2)
 Plotting Graphs
 Creating an array of numbers following a pattern
 Plotting 2D graphs properly using function handlers
 Plotting multiple separate graphs on the same window
 Using MATLAB syntax to customize plots
 Plotting 3D plots: Surface and Mesh plots
 Some useful MATLAB commands and constructs
 Creating cell arrays
 Review of logical operators (AND, OR, NOT)
 The find command
 Locate values in arrays / matrices meeting certain criteria

 Modifying matrices using logical operators


Useful MATLAB Commands (1)
 We now turn to cell arrays / matrices. What are these?
 Cell arrays are arrays where each element can store any
type of variable
 An example: The 1st element could be a 4 x 4 matrix, the
2nd element could be a structure, 3rd element could be a
single number, etc.
 Cell arrays are powerful, as when we’re reading in data
during multiple experiments, each experiment might
have a different total number of points
 How do we create cell arrays?
 A = cell(r,c);  r and c tell us how many rows
and columns this cell matrix will have
Useful MATLAB Commands (2)
 To create a dynamic cell array, we do:
 A = {};
 After, we populate accordingly
 To write to a cell array or access the actual contents in a
location, we use curly braces {}
 To copy elements of a cell array, we use round braces ()
 Examples:
A = cell(1,3);
A{1}=3; A{2}=ones(3,3); A{3}=zeros(4,4);
 ones(3,3) creates a 3 x 3 matrix full of 1s
 zeros(4,4) creates a 4 x 4 matrix full of 0s
Useful MATLAB Commands (3)
b = A{2};
 Equivalent to b = [1 1 1; 1 1 1; 1 1 1];
C = A(1:2);
 Copies elements 1 and 2 from cell array into C
 i.e. C{1}=3; C{2}=ones(3,3);
d = A{1};
 Equivalent to d = 3;
e = A{3};
 Equivalent to e = [0 0 0 0; 0 0 0 0; 0 0 0 0;
0 0 0 0; 0 0 0 0];
Useful MATLAB Commands (4)
 Review of Logical Operators
 These will be useful if we want to write a function that
will behave differently based on the inputs we give it
 Also useful if we want to modify elements of an array or
matrix that meet certain criteria
 Operators produce
1 if expression is
true
 Produce 0 if
expression is false
Useful MATLAB Commands (5)
 Let’s take a look at the find command
 The find command returns locations of an array or
matrix that satisfy a logical expression
 How do we use? index = find(expr);
 expr: Logical operator used to find certain values
 index: The locations in the array / matrix where
expr is true
 Example: A = [1 3 6 2 4];
index1 = find(A >= 4);
 Gives: index1 = [3 5];  Locations 3 and 5
 Tells us that locations 3 – 5 satisfy this logical expression
Useful MATLAB Commands (6)
index = find(A >= 2 & A <= 4);
 Gives: index = [2 4 5];
index = find(A == 3);
 Gives: index = 2;
index = find(A ~= 2);
 Gives: index = [1 2 3 5];
 Using these indices, we can modify arrays / matrices when
certain criteria is met
 Examples: A = [1 3 6 2 4]; B = [1 2 3; 4 5 6];
index = find(A >= 2 & A <= 4);
A(ind) = 0;  Finds those values between 2 & 4, and set to 0
Useful MATLAB Commands (7)
 Now, A = [1 0 6 0 0];
index2 = find(~(B >= 1 & B <= 3));
 Find those values that are NOT greater than or equal to
1, and less than or equal to 3.
B(index2) = [9 10 11];
 Now, B = [1 2 3; 9 10 11];
 One more before we get onto better things
index3 = find(B == 2 | B == 5)
B(index3) = 10;
 Now, B = [1 10 3; 4 10 6];
Tutorial Topics – (3)
 Creating Transfer Functions
 Both polynomial form and zero-pole-gain (ZPK) format

 Minimum Realizations

 Calculating the impulse and step response


 Finding the roots of equations
 Polynomial equations

 Non-linear equations

 Evaluating a polynomial equation at given points


 Using convolution to multiply polynomial equations
 Partial Fraction Decomposition
 Create a matrix by using copies of a smaller matrix
 Converting an array and reshaping it into a matrix
Useful MATLAB Commands (8)
 Creating Transfer Functions
 We have seen these in a variety of courses: Signals and
Systems, Differential Equations, Control Systems and
other Mathematics Courses
 Transfer Functions are dealt in the Laplace domain, s.
 We commonly see two forms of Transfer Functions
 Polynomial Format:

 Zero-Pole-Gain (ZPK) Format:


b0,b1,b2… Poles, K: Gain
a0,a1,a2… Zeroes
Useful MATLAB Commands (9)
 To create the first style of transfer function, use the tf
command
 G = tf(num,den);
 num is an array of coefficients in descending order of
power for the numerator (top-half) of the equation
 den is an array of coefficients in descending order of
power for the numerator (bottom-half) of the equation
 The output, G, is a transfer function object that can be
used in a variety of different signal analysis functions
seen in MATLAB
Useful MATLAB Commands (10)
 Example: Let’s say I wanted to create these TFs:

 G1(s): Numerator: [2 1], Denominator: [1 2 3 1]


 G2(s): Numerator: [5], Denominator: [1 -3 2]
 G3(s): Numerator: [10 5 -3], Denominator: [1 5 -4 0 6]
 Get it? The numbers that go beside each power of s go
in decreasing order in the square brackets
 To specify subtraction, use a negative sign for the #!
Useful MATLAB Commands (11)
 Let’s code these transfer function objects
 G1 = tf([2 1], [1 2 3 1]);
 G2 = tf(5, [1 -3 2]);
 G3 = tf([10 5 -3], [1 5 -4 0 6]);
 How about ZPK format? Pretty much the same thing
This is the case where we specifically know the what
the poles, zeroes and gain are
 Use the zpk command to invoke this style of TF
G = zpk([b0 b1 b2…], [a0 a1 a2…], K);
 b0, b1, b2, … are the zero locations
 a0, a1, a2, … are the pole locations, and K the gain
Useful MATLAB Commands (12)
 Note: We can convert a TF in tf form into zpk form
 Example:
G_TF = tf([2 1], [1 2 3 1]);
G_ZPK = zpk(G_TF);
 Example: Let’s say I wanted to
create these TFs:

 G1(s): zeros: [-2 -3], poles: [-1 -5 -6], gain: 3


 G2(s): zeros: [3], poles: [1-i 1+i], gain: 5
 G3(s): zeros: [-1], poles: [1 -2], gain: 1
 Get it? We can specify imaginary poles / zeroes too!
 Factors with addition are negative poles, and vice-versa
Useful MATLAB Commands (13)
 Let’s code these transfer function objects
 G1 = zpk([-2 -3], [-1 -5 -6], 3);
 G2 = zpk(3, [1-i 1+i], 5);
 G3 = zpk(-1, [1 -2], 1);
 There may be some poles or zeroes that are deemed
insignificant
 Their contribution to the overall system will not affect
the output as much
 Criteria: If poles and zeroes are very close to each other,
or if any pole or zero is far away from the imaginary axis
 To get the best TF, we should remove these
Useful MATLAB Commands (14)
 How do we remove this? Use the minreal function
 Gout = minreal(G);
 Input, G, is a transfer function object created either by
tf, or zpk
 What are transfer functions useful for?
 Transfer functions basically represent the input / output
relationship of a system
 We can feed any input into this system, and we’ll see
what the output is
 The two most common inputs that are used for
simulating behaviour are the step and impulse inputs
Useful MATLAB Commands (15)
 Step Input is defined as:

 Impulse Input (in MATLAB) is defined as:

 We can find the step and impulse response, which is


the response of the system to a step or impulse input
 The output is a set of x and y arrays
 x  A set of time values
 y  What the output amplitude is at each value in x
Useful MATLAB Commands (16)
 Something to note: We are specifying the transfer
function in Laplace domain, yet output is time domain
 This is normal. Laplace is used as a tool to get the time-
response more efficiently  Time is what we want
 To calculate the impulse response, use impulse
 impulse(sys);
 Makes new window plotting impulse resp. of TF object, sys
 impulse(sys, Tfin);
 Makes new window plotting impulse resp. of TF object, sys
with a specified ending time, Tfin
 impulse(sys, time_vector);
 Makes a new window plotting impulse resp. of TF object, sys,
at specific time points, given as an array, time_vector
Useful MATLAB Commands (17)
 We can also repeat the same style of invocation by:
 [y,t] = impulse(sys);
 [y,t] = impulse(sys, Tfin);
 [y,t] = impulse(sys, time_vector);
 In this way, we don’t generate a plot, but outputs two
arrays: y, the impulse response values, and t, the time
points at each of these values in y
 This way is useful if you want to plot more than one
impulse response on the same graph
 Use the plot and subplot tools that we’ve seen earlier
Useful MATLAB Commands (18)
 To calculate the step response, use the step
command, and we call it exactly in the same style as
impulse
 step(sys);
 step(sys, Tfin);
 step(sys, time_vector);
 [y,t] = step(sys);
 [y,t] = step(sys, Tfin);
 [y,t] = step(sys, time_vector);
Useful MATLAB Commands (19)
 Example: Let’s try finding impulse and step response with
these two transfer functions

G1 = tf(5, [1 3 2]);
G2 = tf(3, [1 0 25]);
step(G1,7); xlabel(‘Time’); title(‘Step’);
figure; impulse(G2,4);
xlabel(‘Time’); title(‘Impulse’);
Useful MATLAB Commands (20)
Useful MATLAB Commands (21)
 Let’s try something a bit more advanced
[y1,t1] = step(G1, 0:0.1:7);
[y2,t2] = impulse(G2, 0:0.1:7);
plot(t1,y1,’r-’,t2,y2,’gx-’);
xlabel(‘Time’);
title(‘Step and Impulse Responses’);
legend(‘G1(s)’, ‘G2(s)’);
Useful MATLAB Commands (22)
Useful MATLAB Commands (23)
 MATLAB is a great numerical analysis tool
 We sometimes encounter polynomial equations that are
of 3rd order or higher
 Most conventional calculators can only find up to 3 roots
 MATLAB is able find the roots of any equation you want
 We will look at finding roots for two very popular forms
of equations
 First form is the standard polynomial form:

 Here the equation will have n roots


Useful MALTAB Commands (24)
 The next form is non-linear equations
 Equations that don’t factor nicely like the first form
 We’ll have to use methods like Newton’s method, or any
other numerical root finding tool to find roots
 To find roots using the first form, use roots
 A = roots(array);
 array: is an array of coefficients in descending order,
much like how we saw in the tf command
 Output is an n x 1 array, where n is the total # of roots
Useful MATLAB Commands (25)
 Examples:

 P1 = roots([3 2.5 1 -1 3]);


 P2 = roots([5 0 3 -2 0 -1]);
 … and we thus get:
 P1 = [-0.9195 + 0.8263i; -0.9195 -
0.8263i; 0.5028 + 0.6337i; 0.5028 -
0.6337i];
 P2 = [0.7140; -0.0394 + 0.7440i; -0.0394
- 0.7440i; -0.3176 + 0.6354i; -0.3176 -
0.6354i];
Useful MATLAB Commands (26)
 For non-linear equations, we use fzero
 This finds where the root of a non-linear equation,
based on an initial guess, x0.
 fzero uses a variety of root finding methods to find the
root we want (Newton’s Method, Bisection Method, etc.)
 y = fzero(func, x0);
 func is a function handler of a single variable
 x0 is the initial guess of the root
 Warning: If the non-linear equation has more than 1
root, then we have to specify as more than 1 initial guess
to get all of the roots!
Useful MATLAB Commands (27)
 Example: Let’s try to find some roots of sin(x)
f = @(x) sin(x);
y = fzero(f, 0.5);
y2 = fzero(f, 2.5);
y3 = fzero(f, -4);
 In MATLAB, this will give us:
 y = -1.8428e-28;  ~0 because of approximation
 y2 = 3.1416;  Corresponds to pi
 y3 = -3.1416;  Corresponds to -pi
Useful MATLAB Commands (28)
 Another useful function: Evaluating polynomial
equations at a point, or several points
 You’ll see that this is very useful later when we get into
regression
 Given: A polynomial equation, where its coefficients
are stored in an array  Like what we’ve seen in tf
 val = polyval(coeffs, X);
 coeffs – The array of coefficients in descending order
 X – A single value / vector / matrix of points to evaluate
 val – The same size as X with the equation evaluated at
each corresponding point
Useful MATLAB Commands (29)
 Example: Let’s evaluate at a variety of
different points
coeffs = [3 5 7];
X = [5 7 9];
val = polyval(coeffs,X);
X2 = [1 2; 3 4];
val2 = polyval(coeffs,X2);
 Our outputs are:
 val = [107 189 295];
 val2 = [15 29; 49 75];
Useful MATLAB Commands (30)
 If we have two polynomial equations, with their
coefficients stored in separate arrays, we can use the
convolution operator to multiply the two equations to
get a resultant one
 Use the conv command
 Y = conv(A,B);
 A and B are arrays of coefficients in the style of tf
 Y gives you an array of coefficients that would result if
you multiplied the two polynomial equations together
Useful MATLAB Commands (31)
 Example:

 When we multiply p, with q, we should get:

 When we run this in MATLAB, we’ll see:


P = [1 0 2 4]; Q = [2 0 -1];
A = conv(P,Q);
 Now, we will get: A = [2 0 3 8 -2 -4];
Useful MATLAB Commands (32)
 We can also use MATLAB to perform Partial Fraction
Decomposition (think MTH 240 / MTH 312 / ELE 532)
 We can decompose a fraction that has a set of factored
poles into a sum of each pole scaled by a factor
 What we mean is the following, assuming equation is
in terms of s:

 We have n roots in the equation, and if the equation


has a higher greatest power on the numerator than the
denominator, we have K(s) as well
Useful MATLAB Commands (33)
 We call partial fractions by the residue function
 [R,P,K] = residue(B,A);
 P – the decomposed pole locations (p1,p2,p3…)
 R – The scale factors for each of the fractions (R1,R2,R3…)
 K – The coefficients of the polynomial equation when
the order of the numerator is greater than the
denominator
 If we have repeated roots, then the P and R arrays are
arranged like so:
Useful MATLAB Commands (34)
 Which means:
 R = [… R(j) R(j+1) … R(j+m-1)…];
 P = [… P(j) P(j+1) … P(j+m-1)…];
 Example: Let’s find the PFD of
B = [1 -4];
A = [1 6 11 6];
[R,P,K] = residue(B,A);
 K = [];
 R = [-3.5;6;-2.5];
 P = [-3;-2;-1];
Useful MATLAB Commands (35)
 Couple of things before we take a break:
 If we ever wanted to take a small matrix, and repeat it
horizontally and vertically for a finite amount of times,
we can use the repmat command
 B = repmat(A,M,N);
 M - 1 and N – 1 are the amount of times we want to
repeat the matrix vertically and horizontally respectively
 A is the matrix we want to use to repeat
 Example:
B =

1 2 1 2 1 2
A = [1 2; 3 4]; 3 4 3 4 3 4
1 2 1 2 1 2
B = repmat(A,2,3); 3 4 3 4 3 4
Useful MATLAB Commands (36)
 If we wanted to a column vector, and reshape it into a
matrix, we can use the reshape command
 A = reshape(X,M,N);
 X – A column vector of size MN
 M – The desired columns we want
 N – The desired rows we want
A =
 Example: 1 4 7 10
2 5 8 11
X = (1:12)’; 3 6 9 12
B =
A = reshape(X,4,3);
1 5 9
B = reshape(X,3,4); 2
3
6
7
10
11
4 8 12
Tutorial Topics – (4)
 2nd Hour: 5:10 p.m. – 6:00 p.m.
 Advanced Mathematical Analysis
 Calculating Derivatives and Integrals Analytically using the
Symbolic Math Toolbox
 Using MATLAB to calculate with respect to “x”

 Evaluating derivatives at points

 Calculating the definite integral

 Finding the line of best fit via regression


 Linear regression, parabolic regression, etc.

 Finding the line of best fit via regression


 Linear regression, parabolic regression, etc.

 More commonly known as polynomial interpolation

 Calculating the area under a curve when the function is unknown,


but data points are known
 Calculating via trapezoidal rule
Advanced Math – (1)
 We can use MATLAB as a tool of analytically
calculating what the integrals and derivatives are
 Can do this in closed form (with respect to “x”)
 Can also calculate what they are at points for derivatives,
or what the definite integral is using MATLAB
 Done by using the Symbolic Math Toolbox
 Here are the basic steps you need to do:
 (a) Tell MATLAB what variables you want to use to
create your functions to integrate / differentiate
 (b) Code your equations in C-style syntax, just like what
we’ve been doing so far
Advanced Math – (2)
 (c) Use these equations and put them into functions
that differentiate or integrate for you
 To do step (a), we use the syms command
 This tells MATLAB what variables are symbolic which
will be used in creating equations
 You can specify more than one variable with spaces
 Examples:
syms x t w alpha;
syms y x;
syms w;
Advanced Math – (3)
 Next, you code equations normally – no function
handlers this time, and no need for point-by-point ops
 Example:
syms x y;
F = 5*sin(x) – x^2 + 3;
G = 25 – x^2 – y^2;
 Now that we’re finished, let’s find the derivative:
 A = diff(F);  Differentiates F(x) wrt the
single variable by default
 B = diff(G,’x’);  Differentiates G(x) wrt x
 C = diff(G,’y’);  Differentiates G(x) wrt y
Advanced Math – (4)
 D = diff(F,n);  Differentiates F(x) n times wrt
single variable by default
 E = diff(G,’x’,n);  Does G(x) wrt x n times
 F = diff(G,’y’,n);  Does G(x) wrt y n times
 Examples:
A = diff(F); A = 5*cos(x) - 2*x
B = diff(G,’x’); B = -2*x

C = diff(G,’y’); C = -2*y

D = diff(F,2); D = -5*sin(x) - 2

E = diff(G,’x’,2); E = -2
Advanced Math – (5)
 We can repeat the same thing with integration
 Use the int command
 Here are all the possible ways you can run this
command
 A = int(F);  Finds the indefinite integral wrt the
single variable by default
 B = int(F,x);  Finds the indefinite integral wrt
x, and leaves other variables constant
 No single quotes here!
 C = int(F,a,b);  Finds the definite integral wrt
single variable between the values a and b
 D = int(F,y,a,b);  Finds the definite integral
wrt y between a & b, & leaves other variables constant
Advanced Math – (6)
 Here are some good ‘ol examples, using the functions
we defined earlier:
A = int(F); A = 3*x - 5*cos(x) - x^3/3

B = int(G,x); B = - x^3/3 + (25 - y^2)*x

C = int(G,y); C = - y^3/3 + (25 - x^2)*y

D = int(F,0,1); D = 23/3 - 5*cos(1)


E = int(G,x,0,1); E = 74/3 – y^2
Advanced Math – (7)
 Next, let’s take a look at finding the line of best fit
 Also known as regression
 Regression minimizes the error between the optimal line,
and with the data points
 Error is represented in terms of least squares
 More commonly known as polynomial interpolation
 Won’t go into the math as it’s too detailed for this kind of
tutorial, but I can tell you what function to use
 For this function, we are given a set of x and y points
 It is now our job to figure out the best polynomial equation
to fit these set of points
Advanced Math – (8)
 In other words, for our pair of x and y points, we want
to find the co-efficients a0,a1,a2 etc., such that:

 How do we do this? Use the polyfit command


 A = polyfit(x,y,N);
 x and y are our data points  Must both be same size!
 N is represents the type of polynomial equation we want
 N = 1  Linear
 N = 2  Parabolic / Quadratic
 N = 3  Cubic, etc. etc.
A = [ ];
Advanced Math – (9)
 A has the coefficients in decreasing order, just like
what we have seen in tf
 Let’s do an example. Let’s say we had the following
data
x = [10 15 20 25 40 50 55 60 75];
y = [5 20 18 40 33 54 70 60 78];
 Let’s try fitting a straight line, and a quadratic through
this data by regression
A = polyfit(x,y,1);
B = polyfit(x,y,2);
Advanced Math – (10)
 Now, let’s plot the points on the graph, as well as what
each line looks like:
xp = 10 : 0.1 : 75;  Range is from 10 to 75
Yline = polyval(A,xp);  Find y pts. along line
Ypara = polyval(B,xp);  Find y pts. along parab.
plot(x,y,’bo’,xp,Yline,’g’,xp,Ypara,’r’);
xlabel(‘x’); ylabel(‘y’);
title(‘Linear vs. Quadratic Regression’);
legend(‘Data’, ‘Linear’, ‘Quadratic’);
Advanced Math – (11)
Advanced Math – (12)
 Going with the set of x,y points, let’s say we wanted to
calculate the area / integral
 We don’t have a closed-form function, so we can’t do it
analytically!
 Instead, we’ll turn to numerical methods
 What we’ll do here is calculate the area under the
curve for a set of x,y points using the trapezoidal rule
 Basically, between each neighbouring pair of points, we
form a trapezoid, and calculate the best fitting area
under this trapezoid
 Add up all these trapezoids together and you get the
total area under the curve
Advanced Math – (13)
 How do we do this? You use the trapz routine!
 How do we call?
area = trapz(x,y);
 x and y are the data points that we know
 area  Gives you the total estimated area underneath
the curve bounded by these x,y points
 Note of caution:
 This is the estimated area
 Forming trapezoids around pairs of points will
inevitably lead to over estimation and underestimation
of the real area
Tutorial Topics – (5)
 Numerical Solutions to Differential Equations
 Output is a set of points that is the solution at different
points in time  Not the actual equation
 Sorting arrays
Advanced Math – (14)
 Last advanced topic before moving on
 Calculating numerical solutions to differential equations
 Most computer scientists and mathematicians now rely
on calculating the solutions to differential equations
numerically
 The output is no longer a function of a variable (x, y,…)
 The output is an array of points
 Each point in the array corresponds what the actual solution /
data point / y-value is for a particular point in time
 There are many methods to solve these numerically, but
what I will show you today deals with matrix algebra
Advanced Math – (15)
 Here are the steps:
 (a) Represent the derivatives in terms of their numerical
estimates
 If we let tk represent the time at index k, and let y(t) be
the actual function / constraint that we know of
 Therefore, for succinctness, y(tk) = yk
 From literature, the numerical estimates for the first and
second derivatives are:

 h represents the step size  The increment in between


successive time points  We will assume uniformly
spaced points here
Advanced Math – (16)
 (b) Calculate step size and time points
 To calculate step size: h = (b – a) / n;
 To calculate time points, do t = a + i*h;
 i is the index in time that we want
 (c) Substitute the numerical approximations of the
derivatives into the differential equations
 (d) Determine a system of equations from i = 0 to i = n
by substituting i = 0, 1, 2, … n into step (c)
 (e) Form into a matrix equation and solve
Advanced Math – (17)
 Example:
 Let’s solve for time values between 0 to 1
 Let’s also assume 100 equally spaced points
 First, let’s figure out what the equation is in terms of I

 For t = 0 = t0, y(0) = 0 = y0


 For t = 1 = tn, y(n) = 0 = yn
Advanced Math – (18)
 So we finally have:

 This creates the following system: (blanks are zeroes)

X Y = F
Advanced Math – (19)
 To solve for the y values, we simply find the inverse of
that system  Y = X-1F
 How do we code this?
% Define constants
n = 100;
a = 0; b = 1; h = (b – a)/n;
t = a + (1:100)’*h; % Define time values
f = @(t) 125*t; % Define constraint
F = 2*(h^2)*f(t); % Create RHS vector
X = zeros(n,n); % Create LHS matrix
Advanced Math – (20)
% Create first and last row
X(1,1) = -4;
X(1,2) = 2-h;
X(n,n-1) = 2+h;
X(n,n) = -4;
% Create the rest of the rows
for i = 2 : n-1
X(i,i-1:i+1) = [2+h -4 2-h];
end
Advanced Math – (21)
% Find the inverse of the system
Y = X \ F;
% Plot the graph
plot(t,Y);
xlabel(‘Time (s)’);
ylabel(‘Amplitude’);
title(‘Solution to Diff. Eqn.);
grid;
Advanced Math – (22)
Advanced MATLAB – (23)
 Next advanced function  Sorting
 Very useful!
 If we have an array that we want to sort, use the sort
command
 Y = sort(A,’ascend’);
 Y = sort(A,’descend’);
 [Y,I] = sort(A,’ascend’);
 [Y,I] = sort(A,’descend’);
 First two sort the array in ascending or descending
order & descending order then place in Y
Advanced MATLAB – (24)
 Next two not only give you the sorted array, but it gives
you the indices of where the original values came from
for each corresponding position
 Example: A = [1 5 7 2 4];
Y = sort(A,’ascend’);
 Y = [1 2 4 5 7];
Y = sort(A,’descend’);
 Y = [7 5 4 2 1];
[Y,I] = sort(A,’ascend’);
 Y = [1 2 4 5 7]; I = [1 4 5 2 3];
[Y,I] = sort(A,’descend’);
 Y = [7 5 4 2 1]; I = [3 2 5 4 1];
END!
 In this tutorial, I’ve tried to show you some advanced
concepts that you may use later on in your courses /
thesis
 This is obviously not an exhaustive tutorial! Check
MathWorks forums and Google  They’re your friends
for MATLAB coding
 You’re more than welcome to contact me for MATLAB
help  If I have the time, I will help you
 Last but not least, thanks for coming out!

You might also like