Finals Week Office Hours + TA Evaluations

Since the final assignment is due during finals week, each instructor/TA will hold office hours next week, but they will be different from the normal schedule.

  • Josh will have office hours from 4:30 PM – 6:00 PM on Monday, December 11, outside Smith 232.
  • Keenan will have office hours from 5:00 PM – 6:30 PM on Tuesday, December 12, in Smith 217.
  • Rohan will have office hours from 4:30 PM – 6:00 PM on Thursday, December 14, outside Smith 232.

If you would like to come to office hours but can’t due to finals, please let us know and we’ll try to work out some other way to help.

The website for students to evaluate TAs is now live. If you’ve had substantial interaction with Rohan and/or me, please take the time to fill it out. ūüôā

Assignment 5 (Coding): Geodesic Distance

For the coding portion of this assignment, you will implement the heat method, which is an algorithm¬†for computing geodesic distance on curved surfaces. All of the details you need for implementation are described in Section 3 of the paper, up through and including Section 3.2. Note that you need only be concerned with the case of triangle meshes (not polygon meshes or point clouds); pay close attention to the paragraph labeled “Choice of Timestep.”

Please implement the following routines in:

  1. projects/geodesic-distances/heat-method.js:
    1. constructor
    2. computeVectorField
    3. computeDivergence
    4. compute


  • Refer to sections 3.2 of the paper for discretizations of Algorithm 1 (page 3).
  • Your solution should implement zero neumann boundary conditions but feel free to tryout other Dirichlet and Neumann boundary conditions on your own.

Submission Instructions

Please rename your heat-method.js file to heat-method.txt and put it in a single zip file called This file and your solution to the written exercises should be submitted together in a single email to with the subject line DDG17A5.

Complex-valued differential forms

In Assignment 4, you get to work with complex-valued differential forms. These work mostly the same as real-valued differential forms, but there are a couple additional features.

  • Recall that the wedge product for real-valued two 1-forms \(\alpha\), \(\beta\) is defined as
    \(\alpha \wedge \beta (u, v) = \alpha(u)\cdot \beta(v) – \alpha(v)\cdot \beta(u),\)
    where “\(\cdot\)” in the usual product for real numbers. The wedge product for complex-valued 1-forms is identical, except that \(\cdot\) is replaced with the complex product
    \((a + bi) \cdot (c + di) = ac – bd + (ad + bc)i.\)
  • A special operator on the complex numbers is the conjugation map \(z \mapsto \bar{z}\), where \(\overline{a + bi} = a – bi\). This operator can be applied to complex-valued forms, too. For a \(k\)-form \(\alpha\) the conjugate will be
    \overline{\alpha}(X_1, …, X_k) = \overline{\alpha(X_1, …, X_k)}
    Note that conjugations commutes with the exterior calculus operators \(d\), \(\star\) and \(\wedge\). That is, \(\overline{d\alpha} = d\overline{\alpha}\), \(\overline{\star \alpha} = \star \overline{\alpha}\) and \(\overline{\alpha \wedge \beta} = \overline{\alpha} \wedge \overline{\beta}\).

Please ask in the comments if there is anything else you need to be clarified about complex-valued differential forms.

Implementing Curvature Flow

For anyone interested in learning more about the 1D curvature flows we saw today in class, there’s an assignment (and some notes) from a previous year’s class here:

Curvature Flow

In fact, it wouldn’t be hard to implement in the same code framework we’re using for the class, since you can think of a plane curve as a “mesh” consisting of a single flat polygon with many edges.

The paper I mentioned on discrete curve shortening with no crossings is:

Hass and Scott, “Shortening Curves on Surfaces”, Topology 33, (1994) 25-43.

It would be fun to see an implementation of something like this on a surface (I’ve never done it myself!).

Taking Gradients: Partial Derivatives vs. Geometric Reasoning

In your homework, you are asked to derive an expression for the gradient of the area of a triangle with respect to one of its vertices. In particular, if the triangle has vertices \(a,b,c \in \mathbb{R}^3\), then the gradient of its area \(A\) with respect to the vertex \(a\) can be expressed as
\nabla_a A = \tfrac{1}{2} N \times (b-c).
This formula can be obtained via a simple geometric argument, has a clear geometric meaning, and generally leads to a an efficient and error-free implementation.

In contrast, here’s the expression produced by taking partial derivatives via Mathematica (even after calling FullSimplify[]):

Longer expressions like these will of course produce the same values. But without further simplification (by hand) it will be less efficient, and could potentially exhibit poorer numerical behavior due to the use of a longer sequence of floating-point operations. Moreover, they are far less easy to understand/interpret, especially if this calculation is just one small piece of a much larger equation (as it often is).

In general, taking gradients the “geometric way” often provides greater simplicity and deeper insight than just grinding everything out in components. Your current assignment will give you some opportunity to see how this all works.

Update: As mentioned by Peter in the comments, here’s the expression for the gradient of angle via partial derivatives (as computed by Mathematica). Hopefully by the time you’re done with your homework, you’ll realize there’s a better way!

Linear Algebra and Vector Calculus Review

The prerequisites for 15-458/858B include courses or other past experience in linear algebra and vector calculus. However, we realize that for many of you it may have been a while since you studied this material. The worksheets below provide optional practice for those who wish to brush up on their skills. To emphasize again: this material is purely for your own review; it is not a required assignment, nor will it be graded. You may also wish to review this material from time to time during the semester (e.g., when we study exterior calculus).

[Linear Algebra Review]
[Vector Calculus Review]

Please email us if you’d like to see the solutions! (We keep these solutions private so they can be re-used for other classes in future years.)

Welcome to 15-458 / 15-858B! (Fall 2017)

Welcome to the website¬†for 15-458/858B. ¬†Here you’ll find course notes, lecture slides, and homework (see links on the right).

If you are a student in the class, register now by clicking here!

We strongly prefer that you register using your CMU email, but in any case you must not register with an address at a free email service like,, etc., as email from these domains will be filtered out by the web host.

A few things to note:

  • You will be subscribed to receive email notification about new posts, comments, etc.
  • You can ask questions by leaving a comment on a post. ¬†If you’re apprehensive about asking questions in public, feel free to register under a pseudonym.
  • Otherwise, please associate a picture to your profile by registering your email address at‚ÄĒdoing so will help us better recognize you in class!
  • You can include mathematical notation in your questions using standard $\LaTeX$ syntax. ¬†For instance, when enclosed in a pair of dollar signs, an expression like dollar\int_M K dA = 2\pi\chidollar¬†gets typeset as $\int_M K dA = 2\pi\chi$.
If you encounter any problems while trying to use the website, please contact the TAs (listed under the course description).