Answer ( 1 )

  1. Long answer: To explain, let me give an analogy. Suppose the question was: how do you deal with people? Of course one can give a bunch of pointers about how to deal with people (eg. be nice, phrase things in terms of what the other person wants, etc), but you can only make substantial progress by getting your hands dirty and actually doing what you want to do. That being said, here are some general suggestions:

    (1) Mathematical modeling is an incredibly diverse field, many techniques that are useful in one area won’t be applicable to other areas. Choose a problem and stick with it for a few months.

    (2) Learn to code well.
    (a) Understand objected oriented programming: When you are building a complex computer simulation, you are going to be constantly tweaking aspects of your program. If you design your program well (eg. using object oriented programming), you will be able to make these changes easily without breaking your program. Also maintaining your code can be difficult when you are trying to implement many features.
    (b) Develop good test cases and always test intermediate parts of your code. Eg. suppose that your program has multiple modules that process your inputs and pass them onto the next module. People often run these pipelines and only look at the final result, without looking at the intermediate results. Exploring the results of your data at each step of the pipeline can save you lots of time for getting your code to work.
    (c) Prototype code quickly and develop optimized production code: Depending on your application, I’d recommend knowing a language that you can use to make things work quickly (eg. python, matlab, mathematica), and a language that you can use to make things run really fast (eg. C/C++).
    (d) Strong understanding of data structures: When you are doing simulations, you are most often going to be limited by the memory and/or processing speed of your hardware. You have to manage computer memory carefully to make the program run. It will be good to understand asymptotic runtime, etc.
    (e) Learn parallel programming. More and more, problems are moving to the point where you need them to run on multiple computers. To this end, you need to learn how to write a program where the computation can be subdivided and different subdivisions communicate rarely.

    (3) Again, the skills that you need to know vary widely by what you are trying to model, but I’ll suggest a few important techniques to know.
    (a) Learn how to set-up differential equations given a physical problem and how to make appropriate approximations. In most areas, an equation from first principles will be completely intractable. To practically solve these problems, you need to make certain simplifications.
    (b) Have a wide variety of linear algebra algorithms at your disposal Usually, it is best to have a general idea of how many algorithms work (eg. what types of problems they solve, their runtime, etc), and you can learn the details when you need to use them.
    (c) Use the theory to guide your simulations. What ends up happening is that you’ll have a simulation and a lot of parameters. For most values of those parameters, you get boring behavior. There are special parts of the parameter space that will give interesting results and you can use the theory to help guide you to find these. In particular, you need to get used to heuristic arguments, to find these parameter relationships.

    Anyways, I have said all of these things, but it is pretty useless unless you actually start working on a problem.

Leave an answer