]> gitweb.michael.orlitzky.com - octave.git/blobdiff - divided_difference.m
Add Newton's method and some tests.
[octave.git] / divided_difference.m
index 2b8f8df0d5e75ca126b618acb8e81257235e79c2..cd4b0181b10ed4eb7c460798a9a55c711ee813ab 100644 (file)
@@ -16,6 +16,10 @@ function dd = divided_difference(f, xs)
   ##
   ##   * ``dd`` - The divided difference f[xs(1), xs(2),...]
   ##
+  if (exist('../homework1/src', 'dir'))
+    addpath('../homework1/src');
+  end
+
   order = length(xs) - 1;
   
   if (order < 0)
@@ -23,16 +27,10 @@ function dd = divided_difference(f, xs)
     dd = NA;
   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