If anyone's interested, I put a naive implementation of Newton's Forward Difference Formula up at GitHub:<br><br><a href="http://github.com/cureadvocate/newton-s-forward-difference-formula/tree/master">http://github.com/cureadvocate/newton-s-forward-difference-formula/tree/master</a><br>
<br>For those who don't know the formula, you give it a list of known values and it will return the coefficients of a function f(x) needed to reproduce the sequence you entered and produce any subsequent numbers.<br><br>
As an example, say you're asked to find an f(x) whose first three values (x=1,2,3) are [15, 28, 39].  You would just need to ask:<br><br>---<br>newton:solve([15, 28, 39]).<br>---<br><br>...and it would answer [-1, 16, 0], meaning [f(x) = -x^2 + 16x + 0] or [f(x) = 16x - x^2].  The return value of newton:solve/1 can be fed into the following function [for Coefficients] to produce other values:<br>
<br>---<br>fofx(X, Coefficients) -> Len = length(Coefficients), Exponents = lists:seq(Len-1, 0, -1), lists:sum(lists:zipwith(fun(Coefficient, Exponent) ->  Coefficient * tmath:pow(X, Exponent) end, Coefficients, Exponents)).<br>
---<br><br>Notes:<br><br>-I wrote this for use in the shell, so stability in a real-world application is unknown.<br>-It currently only solves when it's given values starting from x=1.<br>-I have only tested it up to producing equations of degree 4, but it should work for others.<br>
-newton:solve/1 provides a solution as accurate as it can determine, which is dependent on: lack of typos and initial inputs.<br><br>If anyone finds it useful, great!  If not, no biggie--I'm just using it to learn how to use GitHub. :)<br>
<br>Best,<br><br>Steven<br>