Posted on

Learn Matlab Episode #6: For Loops, While Loops, If/Else Statements

Loops in MATLAB

So in this lecture we’re going to talk about for loops, while loops, and if-else statements in matlab. The first thing I’m going to talk about is the basic syntax of a for loop. So the basic syntax of a for loop is for i= some array of numbers, so it can be anything. So, for argument’s sake i’m going to use just a bunch of random numbers [1 3 5 4 10 7] and then I’m just going to display them to the output. Ok, so all that does is it sets i to the first number for the first iteration, it sets i to the second number for the second iteration, and so on. We’ve seen before that matlab can create ranges with the colon though which is probably a more common use of the for loop, so you want to count from one to a thousand or 1 to 10 and so the way you would do that is for i=1:10 which actually in MATLAB is generating the array 1 2 3 4 5 6 7 8 9 10. So I’m just going to display(i) again and you can see that it goes through every value of i. So now that we have the basic for loop syntax in matlab, what I want to do is go through a little more complicated example. You’ve heard of a concept called the mean squared error. If you haven’t let me show it to you on Google. So the mean squared error is if you’re trying to predict something you’re going to have some error for all the data points between the true values and the predicted values, and so the mean squared error basically takes the difference between your prediction and the actual value squares them all, sums them together, and divides it by the number of points. So you can see how we might be able to use for loops to implement that. So now since we don’t have any data or any error we’re just going to pretend that we do. So I’m going to use the rand and function to create an array of size 1000 by one, these error points are going to be normally distributed which is often an assumption that we make any way with statistical models. Ok, so now I have a 1000 length array of errors which represents the difference so i don’t have to calculate the difference in this equation, and so now we can go ahead and calculate the error. So the first thing we want is the sum of square error, right, so that’s just the sum of all the individual elements. So I can do that by first initializing the sum of squared error to zero, and I’m going to do a for loop from 1 to 1,000 to accumulate the sum of squared error being a square of each individual error. Ok, and so now that I have the sum of squared error I’m going to divide that by 1,000 to give me the mean squared error. So one thing to note about MATLAB is that for loops, while loops and if statements are actually very inefficient, so you don’t want to use them unless you absolutely have to, and so I want to demonstrate how that is the case. So we have this mean squared error example, I’ve pre-written the code, and I use a statement called tick and talk to time how long it takes. So you basically you start your code with tic, you put all your actual code after that, and then you put a talk at the end and then it will
tell you the elapsed time it took to run that code. So I’ve already pre written it so i’m going to paste it out here, tic t-i-c, toc t-o-c, ok. So that took .005668 seconds. Now if we look
again carefully at the mean squared error we notice that we want to square each element and then sum them all together, and so that sounds a lot like the dot product, right. So if you take the dot product of a vector with itself you’re just squaring each element and then summing them altogether. So if I wanted to do the mean squared error equation in a more compact way, what I
might want to do is the dot product between e and itself which is e transpose times e as a matrix and then divided by a thousand, right, and so that gives us the same answer as before, and so if I put a tic and a toc around that I get .002896 seconds. So it’s significantly faster than using a for loop. Ok, so that’s for loops, now we’re going to talk about if statements. So what I want to do is I want to visit I want to revisit the is even problem that we talked about in an earlier tutorial. So if you recall what I did was I created a function that returns one for all the entries of X that are even and return 0 otherwise. So you could do this with if statements let’s say X = 1:10, alright and we want to say Y is initialized to a an array of zeros, and we will do for i=1:10 if mod(x(i),2) == 0 then x is even, right. So, that means we’re going to set Y(i) = 1; else Y(i) = 0. So we don’t really need that else since Y(i) is already 0, but I’m including it so you know what an else looks like. Okay, so now if we look at Y has the ones where we expect it which is where x is even. Ok, so now let’s do a similar example also using for loops and if statements. So the example is the problem is let’s say I want to sum all the elements of an array that are divisible by 3, so let’s just use the same X as before, let’s reinitialize Y to all zeros, sorry we don’t even need to do that, let’s set S = 0; and so now I’m going to loop through all X’s again for i=1:10. So if mod(X(i),3 == 0 so if it’s divisible by 3 we want to sum that element. S = S + X(i); and now this time we’re not going to include the else. So is 18 which is equal to 3 + 6 + 9 which we expect so that’s the correct answer. Now of course there is another way to do this, so if you only want to look at the elements in X so notice how whenever we use i we’re actually saying x(i) we can just do this for x=X right because the little x is going to just go through every element in the big X. We were going to start again so we’re going to reinitialize S = 0, say for x=X,if mod(x,3) ==0, S = S + x; end. So if we look at sum again we still get 18. So now let’s look at another problem. So suppose we want to find an element within a matrix. So suppose again we have the same X and I want to find the number 8, so I can use a while loop for that. So I can say I can set a variable called found = 0 meaning false, and then I can say while not found, so I’m going to initialize an index i = 0, gonna say while ~found, i = i + 1 if X(i) == 8 which is the thing I’m looking for. disp(‘I found it\n’); end Ok, so I made a little mistake there we went out of bounds because i went to 11 and the size of X is only 10, so what we did was we forgot to set found to true after we found x(i) == 8. So I’m going to reset this code, i = i + 1 if X(i) == 8, disp(‘I found it!’); set found to true found = 1; now end the if statement, right. So now we go up to 8, printout i found it, and then we quit the while loop. So while loops only go until the condition after the while is false, so it will continue to go while it’s true, and then when it’s false it will stop. Another way we could do this though is we could again use a for loop. So generally speaking whenever you can use a while loop you can also use a for loop, it’s just the syntax that will change and a little bit of the structure of the code. Suppose I want to look through all of X again, so I want to say if X(i) == 8 disp(‘I found it!’) So now this works but there’s a problem right because in the original while loop we would only go up to 8 and then we would quit, versus this for loop goes from 1 to 10 so that’s inefficient because it’s doing extra steps. So what we can do to avoid that is use the break statement. So just to prove to you that it works i’m going to print out for i=1:10 so again if X(i) == 8 disp(‘I found it!’); break; and so now you see I only goes up to 8. It finds 8, it breaks, and then it doesn’t go to 9 and 10.

Posted on

Learn Matlab Episode #5: Linear Algebra

Linear Algebra in MATLAB

Posted on

Learn Matlab Episode #4: Functions & Constants

QUESTION: What are the popular builtin functions/constants in MATLAB? How do you define your own functions?

Posted on

Learn Matlab Episode #3: Basic Arithmetic

QUESTION: How do you perform basic arithmetic in MATLAB?

So in this matlab tutorial we’re going to go through some basic arithmetic in matlab. First I’m going to talk about the usual operations you see in programming which are plus, minus, multiply, and divide, and also the use of parentheses. So I’m going to first create some matrices for us to use, OK. So suppose I want to add two matrices, that’s very simple A + B. I want to subtract two matrices A – B. I want to multiply two matrices that’s A * B. So one thing to note about multiplication is this is pure matrix multiplication which means the inner dimensions of the matrices of A and B have to match. So, for example, if I create another matrix which is, if I create another matrix which doesn’t have the same number of rows as it has columns it’s not going to work. So, the size(B2) is 3 by 2 and the size(A) is two by two, so if I try to multiply A * B2 I’m going to get an error that says inner matrix dimensions must agree. So this does mean though I can do this, right? So, I transpose B2 it’s 2 by 3 and so a two by two matrix times a 2 by 3 matrix will give me a 2 by 3 matrix. So you can also divide matrices with the forward slash, but if you remember from linear algebra there isn’t really a matrix division like that. So, if you want to know what it means you can look it up on the internet, there’s a forward slash division for matrices and there is also a backslash division which we are going to cover in a later tutorial. By the way, if you want to divide two numbers that’s very simple we use the / for that. So the next thing we’re going to talk about is order of operations. It’s generally what you’d expect, anything in parentheses happens first, and then multiplication and division, and then addition and subtraction. So if I have A + B * C I would get that. So if I did B times C and I assign it to a variable D and I add that to A I get the same thing. So you can confirm that the multiplication is happening first. If I wanted the addition to happen first I would put parentheses around them, so we can confirm that what happened in the parentheses came first. So another thing you might want to do when you’re implementing an algorithm or writing some code is element by element operations. So we’ve looked at matrix multiplication which kind of does you
know if you’re looking at row I column J of the output that actually does a dot product between row I of the first matrix and column J of the second matrix. Something we want to do often when we’re coding is element by element multiplication, and so that lets just look at what we have for A & B again. So that’s pretty simple in matlab you just put a .* and so it multiplies each element by each corresponding element in the other matrix. This also works for division so a ./ So if you remember from your linear algebra classes there some different types of multiplication that you can have when it comes to matrices and vectors. First one were going to talk about is the inner product. I have x = (1, 2, 3) y = (4, 5, 6) and I want to do an inner product between these two vectors. One way to do that is simply by using what we already know. So x is a one by three vector and y is a one by three vector and I want the result to be one by one which is a scalar that means I can transpose y and multiply x by y as matrices, right, and so that would be 1 times 4, plus 2 times 5, plus 3 times 6. Another way you can do the dot product in MATLAB is by using the dot function. So we will cover functions more in a later lecture but I will introduce you to some today. So another product you might be interested in is called the outer product, and so that would be just the opposite of what I did before. So instead of transposing y and leaving x alone I’m going to transpose x and leave y alone. So that would give me a three by one vector times a 1 by 3 vector, and so the result would be a three-by-three vector. So that’s the outer product and there is no function for outer product in matlab, and so one thing to note is that usually when we represent vectors when you’re reading a textbook or sitting through a lecture, the vectors are column vectors so they have many rows but only one column, and so that’s kind of the opposite of what I’ve done just now, and so for the inner product you usually see x transpose times y and then for the outer product you see x times y transpose. So, just the opposite since I’ve been using row vectors. Lastly, there is the cross product and so the cross product is the magnitude is the magnitude of the first vector, times the magnitude of the second vector, times the sine of the angle between them, and then you use the right hand rule to determine the direction of the result. Alright, so dot product or inner product is not a vector so it doesn’t have a direction, but the cross product gives you back a vector and so that’s pretty simple to do in matlab, also. It’s just a function called cross.

Posted on

Learn Matlab Episode #2: Basic Syntax

MATLAB Basic Syntax Tutorial

Welcome to this matlab tutorial. This matlab tutorial is going to be on the basic syntax of matlab. So I’ve already opened matlab and this is generally the screen that you see most of the time. So the big main window’s called the command window, you’ll be working here most of the time. You can view your variables in the workspace on the bottom left, and you can view your current directory on the top left, and so that will tell you where in the file system you currently are. So, if you want to open a file from there you don’t have to type in the absolute path you can just type in the filename directly, or if you save a file that’s where it will go. So we call that the working directory and you can change the working directory to keep all your projects separate. So, you can go into the path up here and you know type in another path if you want to use the path for your particular project. So in matlab there are three basic types of numbers that you’ll be working with, or variables, that are all actually matrices. So you have scalars which are just plain numbers, you have vectors which is kind of like a list of numbers, and then you have matrices which are tables of numbers. So as I’ve mentioned before in matlab all these variables are represented as matrices. So if I do something like x = 5 you see that in a regular programming language you might just think of this as x = 5, but I can do something like check the size(x) and I see that it’s actually a 1 by 1 matrix. I can create a vector, we use square brackets, and you don’t need commas but I’m going to use them and so that creates a vector with the v = [1,2,3]; So if I do size(v) it’s a one by three vector, or you can also call it a one by three matrix. So this brings up some other interesting points about how matlab syntax works. I mentioned that you don’t actually need the commas so we can just do that and matlab knows that we want one by three matrix with the elements 123. So you also notice that I added this semicolon at the end of the line and what that does, it’s easier to see if I just don’t do it, so it prints out the last thing. So if I don’t use the semicolon it’s going to print everything out from the previous command, but if I do use the semicolon it will suppress the output. So, that’s why I didn’t put a semicolon after size(v). If I did I wouldn’t see anything. Now we’re going to go on to look at matrices, So it’s very similar to creating a vector except we need to have a way to separate each row, so that’s done with a semicolon and I’m not going to put one at the end so we can see the output. And so what that does is it creates a two by two matrix now with the elements 1234 in the variable A, and if I do size(A) it’s two by two. So those are the two things we’ve learned about initializing vectors and matrices that you can use commas to separate columns but you don’t need the commas you can just use spaces, and to separate rows you can use semi-colons. Another thing is that when you’re working with matrices and vectors
and you’re multiplying them and stuff like that, the dimensions of the vector are very important. So, typically you know you work with a column vector not a row vector like the one I just created, and so we can easily transform the previous vector which was a row vector into a column vector using an apostrophe and so that does a transpose. And so you see now that v used to be a one by three vector and now it’s a three by one column vector. You could have also initialized it using semicolons of course. Ok, so the next thing I want to talk about is how you can access elements of a matrix. Typically that’s done using parentheses and then indices and commas in between. So if I want to in general access the i row in the j column it would be a(i,j) So if I want a(1,1) for example I would do that. If I want a(1,2) and so on a(2,1), Another interesting thing you can do is access a vector within a matrix. So let’s say I want the first row of the matrix a, I can use the colon syntax to get the first row. So I’m going to put a 1 where I choose the row, and then I’m going to put a colon in the choice for column which means return me all the columns in row 1. So if I do that I get 1 2 which is the first world of A. Similarly I can use the colon syntax to get an entire column of A. So let’s say I want to choose the second row, or sorry the second column, so let’s say I want to choose the entire second column, I would do that. And of course if I do a colon in both parts of A it will just return me the entire A. So let’s create a bigger matrix now so I can better illustrate my next point. Alright, so I just created a four by four matrix. So the colon syntax can also be used to access ranges. So if I want I look at A it’s 1-16. If I want the part of A that has so a sub matrix that has the 6, 7, 10, 11 I could access that part by choosing the second and third row in the second and third column. If you’ve programmed before usually when you’re working with vectors, matrices, and arrays they’re zero indexed, in MATLAB it’s one indexed. So, a 1-1 returns me the first element, it’s not a 0-0. Another cool thing that we may use later is the colon syntax can be used all by itself it actually just creates a range. So if I did something like 1:10 gives me back all the numbers from one to ten, and so say I want to assign this to a variable, let me check the size of W, so that creates a row vector with the elements 1 to 10. It’s simpler to do than typing one through ten manually, right. So just to extend this a little bit we aren’t limited to only scalars, vectors, and matrices in matlab. You may have heard of a data structure called tensors, and so those are multi dimensional matrices, so it’s not a table it’s more like a cube or a hypercube. So you can instead of having a two by two matrix you can have a two by two by two tensor.

Posted on

Learn Matlab Episode #1: Installation & Resources

QUESTION: Where can you get MATLAB, add-ons, help with questions, etc?

Posted on

The Complete MATLAB Course: Beginner to Advanced!

I hope you enjoy this FREE complete Matlab course! In this tutorial we will over the following topics:

• What is Matlab, how to download Matlab, and where to find help
• Introduction to the Matlab basic syntax, command window, and working directory
• Basic matrix arithmetic in Matlab including an overview of different operators
• Learn the built in functions and constants and how to write your own functions
• Solving linear equations using Matlab
• For loops, while loops, and if statements
• Exploring different types of data
• Plotting data using the Fibonacci Sequence
• Plots useful for data analysis
• How to load and save data
• Subplots, 3D plots, and labeling plots
• Sound is a wave of air particles
• Reversing a signal
• The Fourier transform lets you view the frequency components of a signal
• Fourier transform of a sine wave
• Applying a low-pass filter to an audio stream
• To store images in a computer you must sample the resolution
• Basic image manipulation including how to flip images
• Convolution allows you to blur an image
• A Gaussian filter allows you reduce image noise and detail
• Blur and edge detection using the Gaussian filter
• Introduction to Matlab & probability
• Measuring probability
• Generating random values