X-Git-Url: http://gitweb.michael.orlitzky.com/?p=octave.git;a=blobdiff_plain;f=divided_difference.m;h=cd4b0181b10ed4eb7c460798a9a55c711ee813ab;hp=139fa478384254d90dfdd44336e3b88fb1dd758a;hb=d7a73d33b0567c9abd72151b2972d7c0eb66e6a1;hpb=7e9b78da72817519f82477be5e9852ed04913aa9 diff --git a/divided_difference.m b/divided_difference.m old mode 100755 new mode 100644 index 139fa47..cd4b018 --- a/divided_difference.m +++ b/divided_difference.m @@ -1,27 +1,36 @@ -#!/usr/bin/octave --silent - function dd = divided_difference(f, xs) ## Compute divided difference of `f` at points `xs`. The argument `xs` ## is assumed to be a vector containing at least one element. If it ## contains n elements, the (n-1)st divided difference will be ## calculated. - order = length(xs); + ## + ## INPUTS: + ## + ## * ``f`` - The function whose divided differences we want. + ## + ## * ``xs`` - A vector containing x-coordinates. The length of `xs` + ## determines the order of the divided difference. + ## + ## + ## OUTPUTS: + ## + ## * ``dd`` - The divided difference f[xs(1), xs(2),...] + ## + if (exist('../homework1/src', 'dir')) + addpath('../homework1/src'); + end + + order = length(xs) - 1; - if (order < 1) + if (order < 0) ## Can't do anything here. Return nothing. dd = NA; - elseif (order == 1) + elseif (order == 0) ## Our base case. - dd = f(xs(1)) + dd = f(xs(1)); else - ## Order > 1, recurse. - - ## f[x0,...,x_n-1] - f0 = divided_difference(f, xs(1:end-1)); - ## f[x1,...,x_n] - f1 = divided_difference(f, xs(2:end)); - - # http://mathworld.wolfram.com/DividedDifference.html - dd = (f0 - f1)/(xs(1) - xs(end)) + ## Order >= 1. + cs = divided_difference_coefficients(xs); + dd = dot(cs, f(xs)); end end