Solving Problems You Thought Were Unsolvable

Eric Choate, Mathematics and Statistics, Radford University

We require the majors in our Applied Mathematics concentration to take a two-semester sequence in Numerical Analysis. It features numerical methods for solving nonlinear equations of one variable and large linear and nonlinear systems, interpolating data, calculating eigenvalues, approximating derivatives and integrals, and approximately solving ordinary differential equations. I also give brief introductions to partial differential equations and stochastic processes, topics not found in our other courses, and numerical methods for them. I greatly enjoy how this class forces our students to look back at their previous classes and confront the problems that were too hard to solve with the methods taught in those classes. These are exactly the kinds of problems that actually need to be solved!

These methods require both an analytical phase to determine what problem needs to be solved and then how it may be approximated with a problem that actually can be solved and also the computational skills to carry out the iterative methods used to converge to that solution. Developing these two distinct skill sets are crucial to the maturation of a young applied mathematician.

I have taught this sequence for the last six years, and in my first two years, I was frustrated by how my students would find Matlab code online that purported to apply the method of the assignment, but since they did not attempt to write the code themselves, they did not understand how it worked and struggled to adapt it to the assigned problem. Then I switched to a flipped classroom model where, for example, I derive the formula for Newton's Method and the behavior of its error in a video the students watch before class, which allows us to use class every day to write code in Matlab to show how the solution converges and how the error decreases, and it allows them to discover how for certain examples, we observe only linear convergence instead of the expected quadratic. This sets up the next class meeting's analysis of why that example behaved that way. Since then, they start their assignments with code they have written with me in class, and it is much easier for them to adapt it themselves. After teaching this way for two years, I realized I moved too far in the direction of coding in class so that now my students struggled more with the analytical questions on their assignments. I feel I now have a good balance of analytical theory underlying numerical methods and improving their ability to write code to implement those methods.

I have been frustrated by the lack of programming experience in some students. I usually have one double major in math and computer science each year, and to a man (sadly, they have all been men) they love this course. However, other students, often very good students, can do the analytical questions without much trouble, but with only the simplest programming for non-computer science majors under their belts, they struggle translating an algorithm they could "easily" do by hand with a calculator into the code required for more complicated problems. Commonly they have no prior Matlab experience, and I have found it to be the ideal environment to take someone with limited programming experience to the point where they can write some nontrivial code. Also, Matlab has built-in solvers for many kinds of problems I ask, which gives a quick way to compare the code they are writing with the "true" solution. Students who have more extensive programming experience do better in the course, and so we are taking steps to require a higher level programming course as a prerequisite for this sequence.

Downloadable version of this essay

Solving Problems You Thought Were Unsolvable (Microsoft Word 2007 (.docx) 14kB Aug23 19)