Math department do not issue PTE numbers. If you have enrollment questions, please speak with with an undergraduate advisor at undergraduate student office located in the Mathematical Sciences Building room 6356, or via email at ugrad@math.ucla.edu. Hope they can make accommodations for you.
Students on the waitlist will be dropped by late evening of the Friday of the second week.
UCLA math department Undergraduate Courses information: https://ww3.math.ucla.edu/courses/
Course Description:
This comprehensive intermediate-level course in C++ programming is designed for students who have a basic understanding of programming principles and seek to deepen their knowledge in both theoretical and practical aspects of C++. The course is divided into two main parts, focusing on advanced programming techniques, memory management, object-oriented programming, and data structures, followed by algorithm analysis using C++.
Part One: Advanced Programming Techniques and Object-Oriented Concepts
Efficient Memory Management: Dive into the core of C++ memory handling using pointers, smart pointers, and managing function pointers. Learn about memory allocation on stack vs. heap, understanding value categories and references, and function overloading. The course will also cover advanced topics like lambda functions and exception handling to manage runtime errors effectively.
Object-Oriented Programming (OOP): Strengthen your understanding of OOP principles including encapsulation, inheritance, and polymorphism. Explore how virtual function, overloading and templates play a crucial role in creating flexible and reusable code.
Recursion: Analyze recursion by understanding the cost associated with stack frames. Learn to optimize recursive functions through tail recursion and the use of helper functions to solve complex problems more efficiently.
Part Two: Algorithm Analysis and Data Structures
Algorithm Complexity: Introduction to Big O notation to evaluate the time complexity of algorithms. This section includes practical analysis and implementation of various sorting and searching algorithms, providing insights into their efficiency and application.
Data Structures: Gain hands-on experience with abstract data types and dynamic data structures. Learn to implement linked lists, stacks, queues, trees, and hash tables using the C++ class mechanism. Each data structure will be discussed in detail, including its implementation, use-case, and relevance in solving real-world problems.
Learning Outcomes:
Develop robust applications using advanced C++ programming techniques.
Apply efficient memory management strategies in software development.
Master object-oriented design principles to build scalable and maintainable software.
Analyze the performance of algorithms and implement effective solutions using appropriate data structures.
Who Should Enroll:
This course is ideal for students with a foundational knowledge of C++ or similar programming languages, who are looking to enhance their programming skills and understand complex data structures and algorithmic techniques to solve real-world problems.
Textbook and resource:
Textbook: Big C++: Late Objects, Enhanced eText, Cay S. Horstmann
Online tutorial https://cplusplus.com/doc/tutorial
C++ Reference https://en.cppreference.com
Working Draft, Standard for Programming Language C++ https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2023/n4928.pdf
Online compiler https://www.onlinegdb.com/
Compiler Explorer https://godbolt.org
Course Description:
Building on the principles and skills acquired in our Intermediate C++ Programming course, this advanced-level course is designed for developers who are ready to dive deeper into the technical complexities and powerful capabilities of C++. It focuses on enhancing system-level programming expertise, mastering sophisticated data structures, and exploring the frontiers of metaprogramming and template use. This course is divided into three comprehensive parts, each dedicated to a specific area of advanced development in C++.
Seamless Progression from Intermediate to Advanced:
Participants in this course will benefit from a seamless progression from the fundamentals covered in the Intermediate C++ Programming course, such as object-oriented programming and basic data structures, to more complex systems and programming challenges. This course will refine and expand these concepts with a focus on system-level operations, integration of multiple programming languages, and advanced data structures that are essential for high-performance computing and complex system design.
Part One: System-Level Programming and Environment
Command Line and Linux Systems: Begin with an exploration of command-line tools and Linux system operations, expanding on the command-line programming introduced in the intermediate course.
Compiling and Linking: Delve deeper into the mechanics of compiling and linking, building on the compilation techniques previously learned and introducing advanced build systems with Makefiles. Extend your skills in integrating C++ with other programming languages, enhancing the software development practices covered earlier.
Version Control and File Management: Advance your proficiency in version control systems and complex file handling, crucial for managing larger and more intricate software projects.
Part Two: Advanced Data Structures
Enhanced Data Handling: While hash tables and trees were introduced in the Intermediate C++ Programming course, this advanced module will delve into the intricate details of these structures. We will explore sophisticated implementations and optimizations in C++, covering aspects such as balancing algorithms for trees and custom hash function design for hash tables. This deeper exploration will equip you with the skills to utilize these data structures in more complex and performance-critical applications.
Part Three: Metaprogramming and Templates
Templates and Metaprogramming: Uncover the power of templates in C++ to allow compile-time code generation, enhancing flexibility and efficiency. Study function templates, class templates, variadic templates, and template specialization.
Advanced Techniques: Dive deeper into policy-based design, forwarding references, perfect forwarding, and metaprogramming with metafunctions like integral constants, reference collapsing, and transformations. Learn to utilize advanced C++ features such as std::declval, substitution failure, and concepts to design robust and optimized code.
Learning Outcomes:
Acquire expert knowledge in system-level programming using C++ and command-line tools.
Master advanced techniques in compiling, linking, and multilingual programming integration.
Implement and analyze complex data structures for high-performance applications.
Employ metaprogramming and advanced template techniques to write highly efficient and adaptable code.
Who Should Enroll:
This course is suited for professional software developers and programmers who have a solid foundation in C++ and wish to push the boundaries of what can be achieved with the language in both system-level applications and complex data handling scenarios.
Textbook and resource:
Textbook: Big C++: Late Objects, Enhanced eText, Cay S. Horstmann
Online tutorial https://cplusplus.com/doc/tutorial
C++ Reference https://en.cppreference.com
Working Draft, Standard for Programming Language C++ https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2023/n4928.pdf
Online compiler https://www.onlinegdb.com/
Compiler Explorer https://godbolt.org
Course Description:
In this course, students will develop a profound understanding of the principles and applications of differential and integral calculus. The curriculum is designed to enhance problem-solving skills in diverse real-world contexts involving rates of change, optimization, and accumulation. The course is structured to ensure students master essential techniques and explore foundational concepts in-depth:
Limits and Continuity: Learn the formal definition of limits, including limits at infinity, and explore continuous functions with comprehensive coverage of the Intermediate Value Theorem and the Squeeze Theorem.
Differentiation: Delve into advanced differentiation techniques including higher order derivatives, implicit differentiation, and applications of L'Hôpital’s rule. Explore critical topics such as the Mean Value Theorem, Taylor expansion, and the profound implications of derivatives in physical and economic models.
Integration: Gain proficiency in a variety of integration methods, from definite and indefinite integrals to advanced techniques like integration by parts, partial fractions, and trigonometric substitution. Practical applications are emphasized through topics such as area between curves, volume calculations, and average value.
The Fundamental Theorem of Calculus: Understand the deep connection between differentiation and integration, exploring its implications for computing areas and solving differential equations.
By the end of this course, students will have a robust mathematical foundation, equipping them with the necessary skills to pursue advanced coursework in fields such as physics, engineering, economics, and the natural sciences.
Learning Outcomes:
Develop a deep understanding of key calculus concepts and their real-world applications.
Apply differentiation and integration techniques to solve complex problems in various scientific and engineering contexts.
Evaluate the behavior of functions and model physical phenomena using advanced calculus.
Who Should Enroll:
This course is ideal for students with a foundational knowledge in mathematics who aim to apply calculus concepts in higher education fields such as engineering, physics, and economics. It provides the analytical tools needed for profound insights into the behavior of natural and engineered systems.
Textbook and resource:
Calculus, fourth edition, by Jon Rogawski, Colin Adams, Robert Franzosa, chapter 1-6
Wolframalpha https://www.wolframalpha.com/
My lecture notes
Course Description:
This course introduces students to the fundamental principles and practical applications of numerical methods, with a strong emphasis on algorithmic design, analysis of convergence, and the implementation aspects using MATLAB programming. It provides a thorough understanding of computational issues related to numerical calculations, such as precision, efficiency, and error analysis, tailored for engineering, physics, and computer science applications.
Course Topics:
Introduction to Numerical Methods:
Overview of IEEE 754 standard for floating-point computation.
Understanding of finite-digit calculations and round-off error analysis.
Fundamental concepts in binary and decimal machine numbers, nested and finite-digit arithmetic.
Nonlinear Equations:
Techniques and error analysis for solving equations in one variable, including the Bisection method, Newton’s method, Secant method, and the method of false position.
Advanced topics on accelerating convergence, handling multiple roots, and zeros of polynomials with Müller’s and Horner’s methods.
Polynomial Approximation and Interpolation:
Detailed exploration of Lagrange polynomials, divided differences, and Hermite interpolation.
Practical applications of interpolation techniques, including cubic spline interpolation and parametric curves.
Numerical Differentiation and Integration:
Techniques for numerical differentiation including two-point and three-point formulas, and addressing round-off error instability.
Comprehensive coverage of numerical integration techniques such as the Trapezoidal rule, Simpson’s rule, Romberg integration, and adaptive quadrature methods.
Introduction to Gaussian quadrature and its applications to arbitrary intervals.
Linear Algebraic Equations:
Direct methods for solving linear systems, including matrix operations and factorization techniques.
Iterative methods in matrix algebra, such as the Jacobi and Gauss-Seidel methods, and discussion on convergence properties of these techniques.
Practical MATLAB Implementations:
Hands-on programming exercises in MATLAB to implement and analyze numerical algorithms.
Case studies that integrate theoretical concepts with software applications to solve complex real-world problems.
Learning Outcomes:
Develop a solid foundation in the theoretical and practical aspects of numerical methods.
Apply numerical techniques to model and solve various mathematical problems encountered in scientific and engineering contexts.
Analyze the efficiency and accuracy of numerical algorithms and improve computational methods using MATLAB.
Who Should Enroll:
This course is designed for upper-level undergraduate and graduate students in engineering, computer science, physics, and applied mathematics who are interested in developing their skills in numerical analysis and computational methods.
Textbook and resource:
R. Burden and J. Faires, Numerical Analysis, 10th Ed.
Course Description:
"Math 151B: Applied Numerical Methods" is an advanced course designed for students who have successfully completed "Math 151A: Applied Numerical Methods." This course dives deeper into the numerical analysis of differential equations and nonlinear systems, emphasizing the development of robust algorithms for solving complex real-world problems. Utilizing MATLAB, students will engage in detailed computational studies that include the implementation and analysis of various numerical methods.
Course Topics:
Ordinary Differential Equations (ODEs):
Introduction to initial-value problems and their theoretical underpinnings.
Numerical methods for ODEs including Euler’s Method, Higher-Order Taylor Methods, and the suite of Runge-Kutta methods.
Advanced topics such as error control, multistep methods, variable step-size methods, and extrapolation methods.
Detailed study of stability in numerical solutions and specialized methods for stiff differential equations.
Boundary-Value Problems:
Techniques for solving linear and nonlinear boundary-value problems using the shooting method and finite difference methods.
Application of numerical optimization techniques such as Newton’s method and Richardson’s extrapolation to improve solution accuracy.
Numerical Solutions of Nonlinear Systems:
Exploration of fixed points, Newton’s method for systems, quasi-Newton methods, and the steepest descent techniques.
Advanced methods including homotopy and continuation methods.
Eigenvalues and Eigenvalue Problems:
Methods for approximating eigenvalues including the power method, Householder’s method, and the QR algorithm.
Application of orthogonal matrices and similarity transformations.
Approximation Theory:
Techniques in discrete least squares approximation, orthogonal polynomials, and Chebyshev polynomials.
Rational function approximation and fast Fourier transforms for efficient computational solutions.
Learning Outcomes:
Master advanced numerical methods for differential equations and eigenvalue problems.
Implement and analyze robust algorithms using MATLAB for solving complex equations and approximating functions.
Develop the ability to critically assess the stability and efficiency of numerical methods and optimize them for specific applications.
Who Should Enroll:
This course is intended for students in fields such as engineering, applied mathematics, physics, and computer science, who have a strong foundation in numerical methods from prior coursework and seek to tackle more sophisticated computational challenges.
Textbook and resource:
R. Burden and J. Faires, Numerical Analysis, 10th Ed.