Expanding Wolfgang's answer, another place you can find ODEs is chemistry. A 0-D model, assuming Arrhenius rates of the form $A \cdot n_i \cdot n_j$ would lead to a set of non-linear ODEs. Once you got the solver setup and running, you could easily expand it to include more species and more reactions until you create something interesting enough for your purpose.
One warning though, depending on the system, the system may end up stiff, and therefore require an implicit solver. I am going to assume that implementing such a solver would be beyond the scope of your class, however, if you are making up fictitious rates, you should be able to avoid this. If allowed, and you want to, you can download an open source implicit library for java from netlib. Note: I haven't personally used this library, but just reading the readme, it appears well documented and fairly complete.
In your question you mention optimization, however that may be slightly more complicated than an ODE solver. If you do want to go that path however, you could look into something such as finding a local minimum to a scalar function of many variables ($y = f(\vec x)$). Again, it is hard to know if this would be too much or too trivial for your skill level. For reference, I would expect this in the second "programming" class for an engineer, likely taken in the 2nd or 3rd year and implemented in matlab.