After stumbling over the stem interpolation calculator
http://typedrawers.com/discussion/205/family-stem-weights-calculator , I have realized that some of the wishes mentioned there (choose a third interpolation point, make interpolation value 0 possible) remembered me to interpolation problems I had some years ago (for the optical size axis instead of the weight axis). I have generalized Lucas de Groot's Interpolation Theory in order to get a solution for these wishes:
Lucas de Groot’s Interpolation Theory states, that font weights of a family of fonts should progress like a geometric sequence. E.g. the first font should have the weight 20 (denoted as A(1, 20) in the image below left) and the ninth font should have the weight 220 (denoted as B(9, 220) and the weights inbetween develop as depicted by the graph. In mathematical terms Lucas de Groot’s Interpolation Theory means interpolating the points A and B by an exponential function

This function is a special case of a generalized set of functions

depicted in the upper right. This means, when we choose the parameter k = ln(y_B/y_A) , the upper right function is the same as the upper left function. The great thing about this is, that we can vary now k in order to get similar curves (for k = 0 we have to use a linear function in order to prevent divison by zero):

With the generalized function, we can now interpolate three points A, B and C — as long as monotony is still given (depicted in the upper right). Of course, we lose the property of geometric progression. In return, it is now possible that y becomes zero.
I have written a Java program (rename the attached stepinterpolation.zip to stepinterpolations.jar and you have the program). That works either with Lucas de Groot's original interpolation or my generalized version depending on th input.
If no point C is given, the values are Lucas de Groot's original interpolation. We can tweak the output by things like setting more decimals:
Now, if we set the point C to an already existing value, nothing will change:
Of course, this would not make much sense, but it shows, that putting a third point is kind of stable. Now we really take a different point C and get different values (remember that we now have lost the property of geometric progression that makes up Lucas de Groot's Theory):
We can also just take two values and set the value at A to zero:
Here is an example for choosing stem widths along an optical size axis (ranging from 6pt to 72pt):
This may also show, why additional sizes between 24pt and 72pt are not that interesting.
You can interpolate any two or three points (C is the optional point) as long as the points develop monotonous (i.e. values are strictly increasing or strictly falling). Have fun with the program!