Hi, I'm trying to figure out which courses I should be taking if I want to do work in computational science. I'm in honours physics so my elective space is pretty limited (maybe two electives per year until year 4). I've gone through the math/computer science/physics sections of our undergraduate calender and picked out courses on anything to do with computational work. There's no way I can take even half of them and some are perhaps geared towards one area of interest or are too "pure" in one area, but I want to know which ones would be the best "core" courses. Any help would be appreciated. The first two are offered by the physics department and are exactly what I'm looking for so I'm pretty much certain I'm taking these two: PHYS 239 LEC 0.50 Course ID: 007408 Scientific Computation 1 Numerical analysis in electrostatics, mechanics and quantum mechanics with emphasis on finite difference and finite element solution methods. PHYS 339 LEC 0.50 Course ID: 007435 Scientific Computation 2 Application of numerical computation to basic topics in chemical physics, statistical mechanics and biophysics. Solution methods will include topics such as Monte Carlo and molecular dynamics methods and numerical optimization techniques. Now for the rest: CS 341 LAB,LEC 0.50 Course ID: 004392 Algorithms The study of efficient algorithms and effective algorithm design techniques. Program design with emphasis on pragmatic and mathematical aspects of program efficiency. Topics include divide and conquer algorithms, recurrences, greedy algorithms, dynamic programming, graph search and backtrack, problems without algorithms, NP-completeness and its implications. CS 343 LAB,LEC 0.50 Course ID: 011417 Concurrent and Parallel Programming An introduction to concurrent and parallel programming, with an emphasis on language constructs. Major topics include: exceptions, coroutines, atomic operations, critical sections, mutual exclusion, semaphores, high-level concurrency, deadlock, interprocess communication, process structuring, shared memory and distributed architectures. Students will learn how to structure, implement and debug concurrent programs. CS 372 LAB,LEC 0.50 Course ID: 011444 Computational Linear Algebra Basic error analysis and estimation of errors in solving linear equations. Special methods for solving systems having special features. Computing and using orthogonal factorizations of matrices. The QR algorithms for solving the algebraic eigenvalue problem. Computation and uses of the singular value decomposition (SVD). CS 466 LEC 0.50 Course ID: 004426 Algorithm Design and Analysis Algorithmic approaches and methods of assessment that reflect a broad spectrum of criteria, including randomized algorithms, amortized analysis, lower bounds, approximation algorithms, and on-line algorithms. Particular examples will be chosen from different areas of active research and application. CS 472 LAB,LEC 0.50 Course ID: 004428 Numerical Solution of Large Sparse Systems of Equations Introduction, example applications from finite element analysis, optimization. Data structures, basic graph theory. Direct methods: symmetric, non-symmetric structures, ordering methods: RCM, minimum degree, nested dissection. Iterative methods: steepest descent, conjugate gradient, GMRES, CGSTAB. Preconditioning methods: level of fill, drop tolerance. Methods for high performance architectures. CS 371 LAB,LEC 0.50 Course ID: 011363 Introduction to Computational Mathematics A rigorous introduction to the field of computational mathematics. The focus is on the interplay between continuous models and their solution via discrete processes. Topics include: pitfalls in computation, solution of linear systems, interpolation, discrete Fourier transforms and numerical integration. Applications are used as motivation. CS 437 LAB,LEC 0.50 Course ID: 004408 Computer Simulation of Complex Systems Building and validation of stochastic simulation models useful in computing, operations research, engineering and science. Related design and estimation problems. Variance reduction. The implementation and analysis of simulation results. [Offered: W,S] CS 466 LEC 0.50 Course ID: 004426 Algorithm Design and Analysis Algorithmic approaches and methods of assessment that reflect a broad spectrum of criteria, including randomized algorithms, amortized analysis, lower bounds, approximation algorithms, and on-line algorithms. Particular examples will be chosen from different areas of active research and application. [Offered: F,S] CS 472 LAB,LEC 0.50 Course ID: 004428 Numerical Solution of Large Sparse Systems of Equations Introduction, example applications from finite element analysis, optimization. Data structures, basic graph theory. Direct methods: symmetric, non-symmetric structures, ordering methods: RCM, minimum degree, nested dissection. Iterative methods: steepest descent, conjugate gradient, GMRES, CGSTAB. Preconditioning methods: level of fill, drop tolerance. Methods for high performance architectures. CS 467 LEC 0.50 Course ID: 011497 Introduction to Quantum Information Processing Basics of computational complexity; basics of quantum information; quantum phenomena; quantum circuits and universality; relationship between quantum and classical complexity classes; simple quantum algorithms; quantum Fourier transform; Shor factoring algorithm; Grover search algorithm; physical realization of quantum computation; error-correction and fault-tolerance; quantum key distribution. CO 352 LAB,LEC 0.50 Course ID: 011440 Computational Optimization A first course in computational optimization. Linear optimization, the simplex method, implementation issues, duality theory. Introduction to computational discrete and continuous optimization. CO 367 LAB,LEC 0.50 Course ID: 003898 Nonlinear Optimization A course on the fundamentals of nonlinear optimization, including both the mathematical and the computational aspects. Necessary and sufficient optimality conditions for unconstrained and constrained problems. Convexity and its applications. Computational techniques and their analysis. AMATH 342 LAB,LEC 0.50 Course ID: 011451 Computational Methods for Differential Equations Modelling of systems which lead to differential equations (examples include vibrations, population dynamics, and mixing processes). Scalar first order differential equations, second-order differential equations, systems of differential equations. Stability and qualitative analysis. Implicit and explicit time-stepping. Comparision of different methods. Stiffness. Linearization and the role of the Jacobian. [Offered: F,S] AMATH 452 LAB,LEC 0.50 Course ID: 011448 Computational Methods for Partial Differential Equations This course studies basic methods for the numerical solution of partial differential equations. Emphasis is placed on regarding the discretized equations as discrete models of the system being studied. Basic discretization methods on structured and unstructured grids. Boundary conditions. Implicit/explicit timestepping. Stability, consistency and convergence. Non-conservative versus conservative systems. Nonlinearities. [Offered: F] AMATH 454 LAB,LEC 0.50 Course ID: 011443 Applications of Computational Differential Equations This course will present two major applications of differential equations based modeling, and focus on the specific problems encountered in each application area. The areas may vary from year to year. Students will gain some understanding of the steps involved in carrying out a realistic numerical modelling exercise. Possible areas include: Fluid Dynamics, Finance, Control, Acoustics, Fate and Transport of Environmental Contaminants. [Offered: W]
If you are interested in computational math and physics, I would recommend both physics classes you listed 239 and 339, as well as CS 341 for algorithm design, CS 371, and all three of those AMATH courses. Those all seem to relate well to one another as far as computational math and physics techniques go. The Algorithm design class will help you with any of those classes in my opinion
I don't think you can call yourself a real true computer scientist unless you know the stuff in CS 341, that's really the fundamentals of theoretical computer science.
I'm almost thinking a double-majoring in computer science and physics with an overall emphasis in computational science in physics, but it'd be nice to do some other stuff as well. I just don't think I can take up all the prereqs to take certain CS classes (like the algorithms class) that I want to along with numerical stuff from the science and amath department. Even if they did let me take them I don't know if I'd drown or not (I didn't take algebra like cs/math students do here or two core second year courses). I do have a pretty strong CS background though. Is a double degree like valuable in the industry? Could I do stuff with the CS background or would it help me at all in science research? What a good route to quantum information theory? I always had an interest in that as well. Thanks for the recommendations so far.