Final Projects for CSU-P Math 242, Spring 2014:
General Information and Possible Project Topics

Introduction

The final project for this course should be a fairly significant program you write to tackle a problem of your choosing.

The steps your will follow for this project process are:

  1. select a topic
  2. do appropriate research
  3. assemble data (if necessary)
  4. write (and debug) code
  5. put together some nice output (perhaps with the corresponding input or a description thereof)
  6. write a report (and hand it in)
  7. give a presentation to the class on your project
By the way, if you wish to work with one or more of your fellow-students, that is a possibility. You should make this clear very early in the process, and it will be necessary for an equitable division of labor to be devised and clearly demonstrated.

Finding a Topic

This is the first step, but an important one: your project will be much more fun to do, will have better results, and will almost certainly earn you a better grade, if you choose a topic about something you are interested in.

You should start here by thinking of something that provokes your curiousity: something in another class you really liked and made you ask more questions, something you do outside of class that you think could be done better (or at least differently), something you've read or heard about somewhere that seems interesting or really makes you want to know more.

Get in the habit of reading a tech magazine (Wired, Scientific American, Communications of the ACM, The American Mathematical Monthly, or some other discipline-specific journal in an area you care about) and see which stories leave you wanting to know more.

If all else fails, start the sentence I wonder ... and see where it takes you.

You project can be one to answer some scientific (or other) question with a program, or it could be more oriented to creating a tool which could be used for certain applications.

Consult your instructor early and often, either to ask for suggestions or simply to announce what you topic will be.

Example topics
Here are some example topics you might consider:
  1. Write code which does facial recognition on digital images. There are a variety of ways to do this, often to do with smoothing the image a bit, putting it in some standard form, and then finding the smallest square deviation from model images of known faces. Other techniques use basically eigenvalue methods (looking for eigenfaces, this is called).
  2. Take some global climate data and look for overall patters and trends, using techniques like the polynomial interpolation and Fourer transform weekly projects we've done so far.
  3. Do some statistical analysis of texts, such as the "vocabulary richness" weekly project we did. There is a lot of data and many statistical methods are easy in Octave.
  4. Make some pretty pictures using Octave of some interesting scientific data. How about a periodic table of electron orbitals, geting functions from a book of physical chemistry for the equations of the electron could around each element, then making nice 3-d plots of them with Octave?
  5. Make a simulation of an interesting experiment, reaction, mathematical problem, or whatever interests you. This could be a simulation of the preditor-prey equations in population biology, or the rate of infections of different viruses spreading through different kinds of populations (hey, how about simulating a zombie apocalypse in different places, like New York City vs Pueblo, CO, vs the entire North American continent vs the European continent (smaller than North America and better public transportation, so probably good for zombies)), or a chemistry experiment you like, or the future evolution of a solare system with some number of bodies in it, etc., etc.
  6. Implement some real, modern cryptographic tools, such as
  7. Do something with analysis of actual acoustic signals. You could surely get them off the Internet in a standard file format like wav which Octave would know how to read in (just they way it knew how to read in jpg files for our image processing work in the Fourier transform project). Then do analysis of them: take fft, see if you can read off the fundamental tone (what a musician would say was "the note they were playing"), and the higher Fourier coefficients which give that instrument its characteristic flavor (what musicians call the "overtones"). At that point, see if you could write something which would take the signal from one instrument and make it sound as if it were on another instrument.
  8. Play similar games with acoustic signals but for human voices. Or how about some sort of analysis of whalesong?
  9. There are great datasets available in astronomy, play with some of them: e.g.:
  10. Try to make a chatbot which would pass the Turing test. Do this by downloading lots of text from one of the sites we used for the frequency analysis weekly project, break texts into "phrases", and then collect data on which phrases tend to follow with other ones -- then, use this compiled data to have your chatbot make reasonable-sounding responses what whatever the user types in.
  11. Your own favorite!

Research

In consultation with your instructor, seek out and read appropriate texts and/or articles which lay out theoretical or computational issues in your topic

Data

If your project involves experimental data, make sure you get the data early and have enough of it, in a useful form, to do what you need.

Code

Write code to solve your problem. Please, before you are finished with it, make sure you heavily comment and document your code. It should be efficient and do all appropriate input sanity checks.

You will need to hand in to your instructor a draft (early version) of your code at an intermediate stage of the project, to get feedback and to help you avoid getting stuck.

Output

It is a very good idea to make a range of runs of a program for various simplified examples or on simple (called "toy") data. Also collect outputs of the program which answer the question (or make some progress towards answering it) if that is you type of project, or which show off its functionality if your project is more oriented towards functionality rather than a conclusion.

Graphs should always have very complete labels, and numbers or other information printed to the screen should also be fully self-explanatory.

Report

You will need to describe you project in a report to be handed in. It should explain the problem, the approach to solution, any details of the approach which turned out to be important/surprising/tricky, and where you got data (if you did). It should have a bibliography citing sources you used for theory or data, if any. It should have the nice outputs mentioned above attached, along with the code you have written, fully commented as mentioned above.

It would be very hard for this report to be fewer than a few pages; excluding the bibliography and code, it should be at least a 1-5 pages.

The gold standard on writing a good report is something in the well-tested and -loved standard format scientific paper. There are many guides to writing such papers — here is a pretty good example of such a guide, please read it.

Papers in mathematics and computer science have some difference with the standard form in physical sciences. In particular, there is general no "materials and methods" section. Instead, frequently the whole paper is structured much more like a story, with an introduction and then a narrative starting with a question and introducing some characters who then are involved in the resolution of the question. Sort of a non-fiction bildungsroman. In any case, your paper should include at least the following parts:

  1. Title, author.
  2. Abstract: a short (one paragraph) description of the problem and then something about your solution, at a very high level. (Really, one paragraph.)
  3. Introduction/Background: some background on your problem, why it interests you and where it comes from. This might be a good place to make clear and complete definitions of terms in your problem. You can give also background on the rules of the game, structure of the tournaments, possible uses for the cryptographic technique you are implementing, history of the physical and computer-simulated orrery, other approaches to numerical solution of differential equations, etc., whichever is relevant to your problem. (This should be at least a page, probably 2-5.)
  4. Methods/Solution Description: Give a fairly detailed high-level description of your approach to a solution. This should include detailed explanation of the structure of your code, naming programs and explaining what they do and what their inputs and outputs are as well as what their most important data structure (variables, be they scalars or matrices or whatever) represent and how they are used. (This will be 2-5 pages, probably.)
  5. Results: Examples of your code's best inputs and/or outputs, showing its most interesting behavior with special attention and detail. (Could be a couple or 10 still images, a movie, or other specific output.)
  6. Code: All your code will be an appendix to your report.
  7. References: If you used references for theorical ideas, please have complete bibliographic citations for them (and/or 'net links). If you got data from some particular sources, also refernce that here.
You may use whichever text processing program you like: your favorite word processor, a tool for writing web pages, whatever. (Personally, I would use the TeX typesetting program.) If you can send me an electronic form of the paper in addition to handing one in physically, please do so.

Presentation

You will do a short (10-15 minute) report on your project to the class during exam period, explaining the problem, your strategy in solving it, any issues which came up during implementation, and showing off some of your nice output.

Note you will be expected to be attentive and involved in your classmates presentations as well. You should try to retain some of the important points in those other presentations and be able to ask reasonable questions and/or make suggestions.

It is not easy to give good presentations. Here is some advice on important things to keep in mind, excerpted from the writings of Edward Tufte ("The Leonardo Da Vinci of data," in the words of the New York Times).

Please read the Tufte rules. Beyond that, some things I like to keep in mind for a good talk are:

  1. Try to leave your audience with the big picture of what you are doing.
  2. Try to leave your audience also with at least one specific, concrete result of your work.
  3. Make sure you talk a lot about the why, and the big idea of the how.
  4. Make sure it is clear to your audience how to get more information on your topic, should it be desired: how to contact you, how to find your results, or where to find similar results.
  5. Don't waste your audience's time with irrelevancies, nor put distractions on your slides.
  6. Slides should have information. Decoration on slides is optional and should almost always be avoided. Tufte's term is "chartjunk." He suggests that you think of the fraction of pixels devoted to actual information and try to maximize it.
  7. Powerpoint (and its ilk) is almost certainly a tool which will make your presentation worse. See this funny slide deck and Tufte's Cognitive Style of Powerpoint. You are almost certainly better off with a PDF projected on the screen, or working at a black- or white-board and giving a useful paper handout.