[erlang-questions] Newton's Forward Difference Formula implementation available at GitHub
Steven Edwards
<>
Sun Feb 15 22:30:09 CET 2009
If anyone's interested, I put a naive implementation of Newton's Forward
Difference Formula up at GitHub:
http://github.com/cureadvocate/newton-s-forward-difference-formula/tree/master
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.
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:
---
newton:solve([15, 28, 39]).
---
...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:
---
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)).
---
Notes:
-I wrote this for use in the shell, so stability in a real-world application
is unknown.
-It currently only solves when it's given values starting from x=1.
-I have only tested it up to producing equations of degree 4, but it should
work for others.
-newton:solve/1 provides a solution as accurate as it can determine, which
is dependent on: lack of typos and initial inputs.
If anyone finds it useful, great! If not, no biggie--I'm just using it to
learn how to use GitHub. :)
Best,
Steven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20090215/ba2b6b3c/attachment.html>
More information about the erlang-questions
mailing list