From CSE100B Wiki
Over the course of this semester, we have covered many of the fundamentals of Matlab programming. Hopefully, you have begun to see how you can use Matlab to solve problems that are interesting to you. There are also many, many other features of Matlab that we simply do not have time to cover. For this project, you will apply the skills that you have learned to address a problem that interests you and/or explore some of the Matlab features that we did not cover in class. As in other labs, you are encouraged to work in teams (of no more than 3) on this project. Please choose a name for your team and a name for your project.
Briefly (1-2 paragraphs) describe what you want to do for your project. What is the problem that you want to solve or model? What will you need to learn in Matlab to accomplish your goal? Is there already Matlab code to do this available on the Web? Will you borrow from that code or write your own? Do you need a dataset for your project? Where will you get this data?
Please be sure to checkout the proposal first, before you spend too much time on the project. At this stage, I can help you refine your topic and make sure that you are on the right track. If you are lacking inspiration, I have provided a list of #Ideas to help you get the ball rolling.
Write a summary of what you did and what you learned in the project. Did you have to modify any of your goals from the proposal? Did you learn anything new about Matlab or the problem that you investigated? What was the most difficult part of the project?
Include your code and any figures, images, or plots that you created. Be sure to cite any resources that you used. Include documentation for your code and briefly explain how each part of the code works. The code should run when downloaded and should be easily understood after reading the documentation.
Please take a look at the calendar and announcements for important dates regarding the project.
Do something that interests you. Maybe there is a problem or concept from one of your other classes or of personal interest that you would like to use Matlab to model or solve. Do not limit yourself here. If you can imagine a program being written to address the topic, then that is a good start. It may turn out to be too much to do everything that you want to do, but I can help you find resources and refine your proposal once you have the idea.
Use someone else’s code as a starting point. This is not only acceptable, but encouraged. Just be sure to give credit to the original author of the code and describe any changes or additions that you made to it. MATLAB has a lively community of active users who share code and ideas. If you can find someone else's code online, read it, understand it, use it and adapt it to your needs, you're done. Here's one possible route: Mathworks, the company that created MATLAB, has a useful website (including all the documentation online, google-searchable): http://www.mathworks.com. In this website, they have a link for their user community, called MATLAB Central. There, the service I use most often is called File Exchange, which is a repository of MATLAB code for free use.
Use the Matlab Demos (found under the "Demo" tab in MATLAB Help) for sample code and inspiration. You can also look at the assignments/labs/projects for other Matlab classes. For example, CSE 200 is a slightly more advanced course offered here at Wash U: http://classes.cec.wustl.edu/~cse200/.
Here is an example that Philip created to solve parabolas: ParabolaSolver
This is a good example of a working project we would accept.
Some interesting topics that we did not get to, that you could choose to explore:
- Symbolic math
- The Matlab debugger
- Solving partial differential equations
- Polynomials and curve fitting
- Monte Carlo methods
- Creating a Graphical User Interface
- Toolboxes: image processing, signal processing, statistics, optimization
Below are some specific ideas that you might try:
- Maybe you liked Sudoku. Extend it to determine if a matrix is a legal full-Sudoku matrix. Write a program that generates Sudoku puzzles and accepts solutions to them, telling the user whether the solution is correct or incorrect. Or, you could write a program that solves Sudoku puzzles automatically.
- Solve the Towers of Hanoi puzzle given any number of disks. Can you simulate it?
- Maybe you like game simulation. Turn the hockey simulation into a game of Pong or simulate the tic-tac-toe game. Can you make it interactive so a user can play? Two players? Keep score? Have different levels of difficulty?
- Write a program that simulates the famous prisoner’s dilemma. Code up various strategies for playing this game, and then run many simulations of the strategies against one another. If you were entering a prisoner’s dilemma tournament, what sort of strategy would be best to submit?
- Write a Blackjack simulator. You could create a game that the user can play, or you could code up a strategy for playing the game. Then, simulate the strategy over many hands of Blackjack. What’s the best strategy that you can come up with when you know which cards have already been played?
- Simulate biological/chemical processes such as Reaction-Diffusion systems.
- Simulate physics (examples here).
- Simulate flocking behavior. You can make assumptions and modify the rules accordingly. Here are some examples: Boids by Craig Reynolds, Boids with pseudocode by Conrad Parker.
- Construct and visualize Fractals.
- Data visualization. One interesting direction might be the visualization method called Treemap (here's a lively example). Read about it on Wikipedia, and try to imagine what algorithm could be used to generate such plots. You could create one from scratch, but you could also find a Treemap implementation on File Exchange. Figure it out, and use it to display some cool data of your choice. For that purpose, you might have to download some text files, or excel files, or copy-paste data from a website into a text file.
Student Questions and Answers
Questions? Please post them on the Google Group http://groups.google.com/group/wustl-matlab.