This is the solution to Quiz 4: Problems - MATLAB loops.
The following figure illustrates the grade distribution for this quiz.
This quiz is about for loops, while loops and vectorization in MATLAB.
1. Write a function that takes an input integer, and computes its factorial,
in the following ways:
(a) Write this function using while-loop. Name it
(b) Write this function using for-loop. Name it
(c) Write this function using the vectorization concept. Name it
getFacVec(n). (Hint: for the vectorized version of this function, you will have to first create a vector of integers from 1 to n, using MATLAB vector construction notation (This is very simple and easy if you recall from lecture notes). Then use MATLAB’s built-in prod() function to accomplish the task of computing $n!$ as given by the above equation.)
2. Write a MATLAB script,
timeFacFuncs.m that times the performance of the three functions you wrote in the previous problem, so that when you run this script, you get an output like the following,
>> timeFacFuncs average runtime for getFacWhile(1700000): 0.0054129 seconds average runtime for getFacFor(1700000): 0.0080964 seconds average runtime for getFacVec(1700000): 0.005283 seconds
Here is the script timeFacFuncs.m.
3. Extra Credit Modify your answer to problem 1.(c) above in such a way that instead of using
prod(), you get the factorial using
sum() and some other elementary mathematical MATLAB functions. (Hint: for this problem, you will need to transform the numbers involved in calculations using some appropriate MATLAB mathematical function and revert the result at the end.)
You can do so, using
log() transformation of the numbers in factorial,
Therefore, a possible implementation using
sum() could be this function: getFacVecSum.m.