SlideShare uma empresa Scribd logo
1 de 133
Baixar para ler offline
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 to perform Partial Fraction
 We can also use MATLAB
                         Commands (32)
  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!

Mais conteúdo relacionado

Mais procurados

Importance of matlab
Importance of matlabImportance of matlab
Importance of matlabkrajeshk1980
 
Matlab Introduction
Matlab IntroductionMatlab Introduction
Matlab Introductionideas2ignite
 
1575 numerical differentiation and integration
1575 numerical differentiation and integration1575 numerical differentiation and integration
1575 numerical differentiation and integrationDr Fereidoun Dejahang
 
NUMERICAL METHODS MULTIPLE CHOICE QUESTIONS
NUMERICAL METHODS MULTIPLE CHOICE QUESTIONSNUMERICAL METHODS MULTIPLE CHOICE QUESTIONS
NUMERICAL METHODS MULTIPLE CHOICE QUESTIONSnaveen kumar
 
Introduction to matlab
Introduction to matlabIntroduction to matlab
Introduction to matlabTarun Gehlot
 
Matlab simulink introduction
Matlab simulink introductionMatlab simulink introduction
Matlab simulink introductionAmeen San
 
MATLAB : Numerical Differention and Integration
MATLAB : Numerical Differention and IntegrationMATLAB : Numerical Differention and Integration
MATLAB : Numerical Differention and IntegrationAinul Islam
 
MATLAB/SIMULINK for Engineering Applications day 2:Introduction to simulink
MATLAB/SIMULINK for Engineering Applications day 2:Introduction to simulinkMATLAB/SIMULINK for Engineering Applications day 2:Introduction to simulink
MATLAB/SIMULINK for Engineering Applications day 2:Introduction to simulinkreddyprasad reddyvari
 
Matlab-free course by Mohd Esa
Matlab-free course by Mohd EsaMatlab-free course by Mohd Esa
Matlab-free course by Mohd EsaMohd Esa
 
Approximation and error
Approximation and errorApproximation and error
Approximation and errorrubenarismendi
 
Ch 07 MATLAB Applications in Chemical Engineering_陳奇中教授教學投影片
Ch 07 MATLAB Applications in Chemical Engineering_陳奇中教授教學投影片Ch 07 MATLAB Applications in Chemical Engineering_陳奇中教授教學投影片
Ch 07 MATLAB Applications in Chemical Engineering_陳奇中教授教學投影片Chyi-Tsong Chen
 
Brief Introduction to Matlab
Brief  Introduction to MatlabBrief  Introduction to Matlab
Brief Introduction to MatlabTariq kanher
 
Numerical Methods - Oridnary Differential Equations - 1
Numerical Methods - Oridnary Differential Equations - 1Numerical Methods - Oridnary Differential Equations - 1
Numerical Methods - Oridnary Differential Equations - 1Dr. Nirav Vyas
 
introduction to Numerical Analysis
introduction to Numerical Analysisintroduction to Numerical Analysis
introduction to Numerical AnalysisGhulam Mehdi Sahito
 
Introduction to matlab
Introduction to matlabIntroduction to matlab
Introduction to matlabSantosh V
 

Mais procurados (20)

Numerical Computing
Numerical Computing Numerical Computing
Numerical Computing
 
Importance of matlab
Importance of matlabImportance of matlab
Importance of matlab
 
MATLAB - Arrays and Matrices
MATLAB - Arrays and MatricesMATLAB - Arrays and Matrices
MATLAB - Arrays and Matrices
 
Matlab Introduction
Matlab IntroductionMatlab Introduction
Matlab Introduction
 
Matlab
MatlabMatlab
Matlab
 
Numerical Method
Numerical Method Numerical Method
Numerical Method
 
1575 numerical differentiation and integration
1575 numerical differentiation and integration1575 numerical differentiation and integration
1575 numerical differentiation and integration
 
NUMERICAL METHODS MULTIPLE CHOICE QUESTIONS
NUMERICAL METHODS MULTIPLE CHOICE QUESTIONSNUMERICAL METHODS MULTIPLE CHOICE QUESTIONS
NUMERICAL METHODS MULTIPLE CHOICE QUESTIONS
 
Introduction to matlab
Introduction to matlabIntroduction to matlab
Introduction to matlab
 
Matlab
MatlabMatlab
Matlab
 
Matlab simulink introduction
Matlab simulink introductionMatlab simulink introduction
Matlab simulink introduction
 
MATLAB : Numerical Differention and Integration
MATLAB : Numerical Differention and IntegrationMATLAB : Numerical Differention and Integration
MATLAB : Numerical Differention and Integration
 
MATLAB/SIMULINK for Engineering Applications day 2:Introduction to simulink
MATLAB/SIMULINK for Engineering Applications day 2:Introduction to simulinkMATLAB/SIMULINK for Engineering Applications day 2:Introduction to simulink
MATLAB/SIMULINK for Engineering Applications day 2:Introduction to simulink
 
Matlab-free course by Mohd Esa
Matlab-free course by Mohd EsaMatlab-free course by Mohd Esa
Matlab-free course by Mohd Esa
 
Approximation and error
Approximation and errorApproximation and error
Approximation and error
 
Ch 07 MATLAB Applications in Chemical Engineering_陳奇中教授教學投影片
Ch 07 MATLAB Applications in Chemical Engineering_陳奇中教授教學投影片Ch 07 MATLAB Applications in Chemical Engineering_陳奇中教授教學投影片
Ch 07 MATLAB Applications in Chemical Engineering_陳奇中教授教學投影片
 
Brief Introduction to Matlab
Brief  Introduction to MatlabBrief  Introduction to Matlab
Brief Introduction to Matlab
 
Numerical Methods - Oridnary Differential Equations - 1
Numerical Methods - Oridnary Differential Equations - 1Numerical Methods - Oridnary Differential Equations - 1
Numerical Methods - Oridnary Differential Equations - 1
 
introduction to Numerical Analysis
introduction to Numerical Analysisintroduction to Numerical Analysis
introduction to Numerical Analysis
 
Introduction to matlab
Introduction to matlabIntroduction to matlab
Introduction to matlab
 

Semelhante a Advanced MATLAB Tutorial for Engineers & Scientists

Semelhante a Advanced MATLAB Tutorial for Engineers & Scientists (20)

Matlab guide
Matlab guideMatlab guide
Matlab guide
 
From zero to MATLAB hero: Mastering the basics and beyond
From zero to MATLAB hero: Mastering the basics and beyondFrom zero to MATLAB hero: Mastering the basics and beyond
From zero to MATLAB hero: Mastering the basics and beyond
 
Matlab Manual
Matlab ManualMatlab Manual
Matlab Manual
 
Introduction to Matlab - Basic Functions
Introduction to Matlab - Basic FunctionsIntroduction to Matlab - Basic Functions
Introduction to Matlab - Basic Functions
 
Matlab introduction
Matlab introductionMatlab introduction
Matlab introduction
 
2. Chap 1.pptx
2. Chap 1.pptx2. Chap 1.pptx
2. Chap 1.pptx
 
COMPANION TO MATRICES SESSION II.pptx
COMPANION TO MATRICES SESSION II.pptxCOMPANION TO MATRICES SESSION II.pptx
COMPANION TO MATRICES SESSION II.pptx
 
MATLAB
MATLABMATLAB
MATLAB
 
A complete introduction on matlab and matlab's projects
A complete introduction on matlab and matlab's projectsA complete introduction on matlab and matlab's projects
A complete introduction on matlab and matlab's projects
 
Matlab ppt
Matlab pptMatlab ppt
Matlab ppt
 
Matlab Tutorial.ppt
Matlab Tutorial.pptMatlab Tutorial.ppt
Matlab Tutorial.ppt
 
EE6711 Power System Simulation Lab manual
EE6711 Power System Simulation Lab manualEE6711 Power System Simulation Lab manual
EE6711 Power System Simulation Lab manual
 
Ch1
Ch1Ch1
Ch1
 
Introduction to Matlab.pdf
Introduction to Matlab.pdfIntroduction to Matlab.pdf
Introduction to Matlab.pdf
 
MatlabIntro.ppt
MatlabIntro.pptMatlabIntro.ppt
MatlabIntro.ppt
 
MatlabIntro.ppt
MatlabIntro.pptMatlabIntro.ppt
MatlabIntro.ppt
 
MatlabIntro.ppt
MatlabIntro.pptMatlabIntro.ppt
MatlabIntro.ppt
 
Matlab intro
Matlab introMatlab intro
Matlab intro
 
MatlabIntro.ppt
MatlabIntro.pptMatlabIntro.ppt
MatlabIntro.ppt
 
EPE821_Lecture3.pptx
EPE821_Lecture3.pptxEPE821_Lecture3.pptx
EPE821_Lecture3.pptx
 

Último

ICS 2208 Lecture Slide Notes for Topic 6
ICS 2208 Lecture Slide Notes for Topic 6ICS 2208 Lecture Slide Notes for Topic 6
ICS 2208 Lecture Slide Notes for Topic 6Vanessa Camilleri
 
4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptxmary850239
 
How to Fix XML SyntaxError in Odoo the 17
How to Fix XML SyntaxError in Odoo the 17How to Fix XML SyntaxError in Odoo the 17
How to Fix XML SyntaxError in Odoo the 17Celine George
 
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...Nguyen Thanh Tu Collection
 
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITWQ-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITWQuiz Club NITW
 
Narcotic and Non Narcotic Analgesic..pdf
Narcotic and Non Narcotic Analgesic..pdfNarcotic and Non Narcotic Analgesic..pdf
Narcotic and Non Narcotic Analgesic..pdfPrerana Jadhav
 
Reading and Writing Skills 11 quarter 4 melc 1
Reading and Writing Skills 11 quarter 4 melc 1Reading and Writing Skills 11 quarter 4 melc 1
Reading and Writing Skills 11 quarter 4 melc 1GloryAnnCastre1
 
Tree View Decoration Attribute in the Odoo 17
Tree View Decoration Attribute in the Odoo 17Tree View Decoration Attribute in the Odoo 17
Tree View Decoration Attribute in the Odoo 17Celine George
 
Mythology Quiz-4th April 2024, Quiz Club NITW
Mythology Quiz-4th April 2024, Quiz Club NITWMythology Quiz-4th April 2024, Quiz Club NITW
Mythology Quiz-4th April 2024, Quiz Club NITWQuiz Club NITW
 
Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...
Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...
Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...DhatriParmar
 
ClimART Action | eTwinning Project
ClimART Action    |    eTwinning ProjectClimART Action    |    eTwinning Project
ClimART Action | eTwinning Projectjordimapav
 
How to Make a Duplicate of Your Odoo 17 Database
How to Make a Duplicate of Your Odoo 17 DatabaseHow to Make a Duplicate of Your Odoo 17 Database
How to Make a Duplicate of Your Odoo 17 DatabaseCeline George
 
How to Manage Buy 3 Get 1 Free in Odoo 17
How to Manage Buy 3 Get 1 Free in Odoo 17How to Manage Buy 3 Get 1 Free in Odoo 17
How to Manage Buy 3 Get 1 Free in Odoo 17Celine George
 
Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...
Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...
Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...DhatriParmar
 
Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management systemChristalin Nelson
 
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptxQ4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptxlancelewisportillo
 
Using Grammatical Signals Suitable to Patterns of Idea Development
Using Grammatical Signals Suitable to Patterns of Idea DevelopmentUsing Grammatical Signals Suitable to Patterns of Idea Development
Using Grammatical Signals Suitable to Patterns of Idea Developmentchesterberbo7
 
Expanded definition: technical and operational
Expanded definition: technical and operationalExpanded definition: technical and operational
Expanded definition: technical and operationalssuser3e220a
 

Último (20)

ICS 2208 Lecture Slide Notes for Topic 6
ICS 2208 Lecture Slide Notes for Topic 6ICS 2208 Lecture Slide Notes for Topic 6
ICS 2208 Lecture Slide Notes for Topic 6
 
4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx
 
Mattingly "AI & Prompt Design: Large Language Models"
Mattingly "AI & Prompt Design: Large Language Models"Mattingly "AI & Prompt Design: Large Language Models"
Mattingly "AI & Prompt Design: Large Language Models"
 
How to Fix XML SyntaxError in Odoo the 17
How to Fix XML SyntaxError in Odoo the 17How to Fix XML SyntaxError in Odoo the 17
How to Fix XML SyntaxError in Odoo the 17
 
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
 
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITWQ-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
 
Narcotic and Non Narcotic Analgesic..pdf
Narcotic and Non Narcotic Analgesic..pdfNarcotic and Non Narcotic Analgesic..pdf
Narcotic and Non Narcotic Analgesic..pdf
 
Reading and Writing Skills 11 quarter 4 melc 1
Reading and Writing Skills 11 quarter 4 melc 1Reading and Writing Skills 11 quarter 4 melc 1
Reading and Writing Skills 11 quarter 4 melc 1
 
Tree View Decoration Attribute in the Odoo 17
Tree View Decoration Attribute in the Odoo 17Tree View Decoration Attribute in the Odoo 17
Tree View Decoration Attribute in the Odoo 17
 
Mythology Quiz-4th April 2024, Quiz Club NITW
Mythology Quiz-4th April 2024, Quiz Club NITWMythology Quiz-4th April 2024, Quiz Club NITW
Mythology Quiz-4th April 2024, Quiz Club NITW
 
Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...
Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...
Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...
 
ClimART Action | eTwinning Project
ClimART Action    |    eTwinning ProjectClimART Action    |    eTwinning Project
ClimART Action | eTwinning Project
 
How to Make a Duplicate of Your Odoo 17 Database
How to Make a Duplicate of Your Odoo 17 DatabaseHow to Make a Duplicate of Your Odoo 17 Database
How to Make a Duplicate of Your Odoo 17 Database
 
How to Manage Buy 3 Get 1 Free in Odoo 17
How to Manage Buy 3 Get 1 Free in Odoo 17How to Manage Buy 3 Get 1 Free in Odoo 17
How to Manage Buy 3 Get 1 Free in Odoo 17
 
Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...
Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...
Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...
 
Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management system
 
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptxQ4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
 
Faculty Profile prashantha K EEE dept Sri Sairam college of Engineering
Faculty Profile prashantha K EEE dept Sri Sairam college of EngineeringFaculty Profile prashantha K EEE dept Sri Sairam college of Engineering
Faculty Profile prashantha K EEE dept Sri Sairam college of Engineering
 
Using Grammatical Signals Suitable to Patterns of Idea Development
Using Grammatical Signals Suitable to Patterns of Idea DevelopmentUsing Grammatical Signals Suitable to Patterns of Idea Development
Using Grammatical Signals Suitable to Patterns of Idea Development
 
Expanded definition: technical and operational
Expanded definition: technical and operationalExpanded definition: technical and operational
Expanded definition: technical and operational
 

Advanced MATLAB Tutorial for Engineers & Scientists

  • 1. 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.
  • 2. 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!
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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!
  • 8. 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)
  • 9. 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
  • 10. 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
  • 11. 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!
  • 12. 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
  • 13. 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
  • 14. 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];
  • 15. 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];
  • 16. 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];
  • 17. 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.
  • 18. 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];
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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];
  • 23. 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
  • 24. 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];
  • 25. 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];
  • 26. 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
  • 27. 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
  • 28. 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];
  • 29. 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
  • 30. 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];
  • 31. 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
  • 32. 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!
  • 33. 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);
  • 34. 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
  • 35. 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];
  • 36. 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
  • 37. 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
  • 38. 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...
  • 40. 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
  • 41. 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];
  • 42. 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
  • 43. 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...
  • 45. 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);
  • 47. 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
  • 48. 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)’);
  • 50. 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
  • 51. 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:
  • 52. 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
  • 53. 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
  • 54. 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
  • 55. 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
  • 56. 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
  • 57. 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’);
  • 58. 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’);
  • 60. 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
  • 61. Plotting Graphs – (25)  Example: x = 0:2:10; y = x; plot(x,y); set(gca,‘xtick’,0:2:10); set(gca,’ytick’,0:10);
  • 62. 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
  • 63. 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);
  • 64. 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
  • 65. 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
  • 66. 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
  • 67. 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’);
  • 68. Plotting Graphs – (32) surf plot mesh plot
  • 69. 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
  • 70. 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
  • 71. 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
  • 72. 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];
  • 73. 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
  • 74. 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
  • 75. 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
  • 76. 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];
  • 77. 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
  • 78. 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
  • 79. 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
  • 80. 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 #!
  • 81. 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
  • 82. 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
  • 83. 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
  • 84. 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
  • 85. 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
  • 86. 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
  • 87. 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
  • 88. 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);
  • 89. 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’);
  • 91. 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)’);
  • 93. 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
  • 94. 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
  • 95. 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];
  • 96. 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!
  • 97. 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
  • 98. 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
  • 99. 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];
  • 100. 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
  • 101. 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];
  • 102. Useful MATLAB to perform Partial Fraction  We can also use MATLAB Commands (32) 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
  • 103. 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:
  • 104. 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];
  • 105. 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
  • 106. 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
  • 107. 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
  • 108. 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
  • 109. 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;
  • 110. 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
  • 111. 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
  • 112. 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
  • 113. 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
  • 114. 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
  • 115. 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 = [ ];
  • 116. 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);
  • 117. 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’);
  • 119. 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
  • 120. 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
  • 121. 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
  • 122. 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
  • 123. 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
  • 124. 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
  • 125. 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
  • 126. Advanced Math – (18)  So we finally have:  This creates the following system: (blanks are zeroes) X Y = F
  • 127. 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
  • 128. 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
  • 129. 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;
  • 131. 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
  • 132. 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];
  • 133. 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!