Links
The MATLAB project should be a very small research problem that takes a few hours. Emphasis is on setting up and formulating an interesting problem, not on writing hundreds of lines of code.
There are two options for the project: either pick one of the suggested topics below, or choose your own topic. If you choose your own topic, you must email the instructor or one of the TAs and get permission; in the email, describe the topic and how you plan on solving it. If you choose your own topic, it can be relatively easy.
Your code must be very well documented, and should explain what you are doing. Don't force the grader to redo your project just to figure out what you were doing!
If you don't want to choose your own topic, then you may select from one of the following (this list will be constantly updated).
These topics have been written out in detail:
- Blackjack. See the blackjack project description (PDF). Difficulty: easy to medium.
- Steganography. See the steganography project description (PDF). Difficulty: easy. Update: Matlab can save a lossless jpeg, but the
format is not widely supported. You may choose to write the image to png (a lossless format) instead of to lossless jpeg.
- Coin counting. See the coin counting project description (PDF). Difficulty: medium.
- Simulating flocking birds. See the bird flocking project description (PDF). Difficulty: medium (it depends).
- Google PageRank. Read section 2.11 in Chapter 2 of Moler's online textbook, and do problems 2.23, 2.25 and 2.26. Difficulty: easy.
These topics are less explicit, but may be just as easy:
- Make a GUI that plays tic-tac-toe with the user. Use Matlab's GUIDE (GUI Design Environment) to design the GUI (it is simpler than you might think!). Difficulty: medium.
- Use an ODE solver to model a falling ball (with air-resistance, if desired), and then display a movie of the motion using the
movie
command. Difficulty: easy.
- Matlab has a very good sparse eigenvalue solver,
eigs
, but the sparse singular-value solver svds
is not so good (it calls eigs
on a modified matrix). Write your own Laczos-based SVD routine to replace svds
. See the textbook "Matrix Computations" by Golub and Van Loan, or see the instructor or TA, for an algorithm. Difficulty: medium.
Here are possible ideas for your own topic:
- Image compression. Recreate either jpeg compression (which uses the discrete cosine transform, "DCT", similar to the FFT), or jpeg 2000 compression (which uses a wavelet transform). Or, use your own transform, and apply it to a useful class of images. Difficulty: hard.
- Search engine. Make a small search engine in Matlab (see chapter 2 of Moler for a description of PageRank, and how to crawl the web using Matlab). Optionally, include some basic semantic features, like searching for "computer" when the search term is "computers", or "work" when the search term is "working." Difficulty: hard to very-hard.
- Audio compression. Take an audio sample and compress it, using something like a short-time FFT or a windowed/lapped DCT. Difficulty: medium-hard to hard.
- Read the eigenvalue chapter (chapter 10) of Moler's online textbook, in particular the section on PCA. Use PCA to do something interesting, e.g. explore eigenfaces. Difficulty: easy.
- Read the eigenvalue chapter (chapter 10) of Moler's online textbook, in particular the section on PCA. Following his discussion of digraph frequency (see problem 10.14), use PCA to find the digraph frequency of a long work of English literature. Use this information to make a simple codebreaker, and solve, for example, the daily cryptogram or cryptoquote. Difficulty: hard to very-hard.
- Write a Matlab program to break a simple captcha (you can make a very crude captcha, just by converting text to an image without any obstruction). Difficulty: hard (for a crude captcha) to extremly hard (for gmail's captcha). See recent news items about gmail and hotmail captcha cracked (and another similar article ).