diff --git a/newton_differentiation.m b/newton_differentiation.m index 2caa7ee..82163e5 100644 --- a/newton_differentiation.m +++ b/newton_differentiation.m @@ -13,22 +13,24 @@ function y = b_newt_diff1(Y,h) end -function y = newt_diff_fr(Y,X,x,h) +function y = newt_diff_fr1(Y,X,x,h) idx = find(X==x); if (idx == length(X)) - elems = [X(idx), X(idx-1)] + elems = [Y(idx), Y(idx-1)] y = b_newt_diff1(elems,h) elseif (idx == 1) - elems = [X(idx), X(idx+1)] + elems = [Y(idx), Y(idx+1)] y = f_newt_diff1(elems,h) else - elems = [X(idx), X(idx+1)] + elems = [Y(idx-1), Y(idx+1)] y = c_newt_diff1(elems,h) endif endfunction - +X = [0 1 2 3 4] +Y = X.^2 +newt_diff_fr1(Y,X,1,1) @@ -41,11 +43,11 @@ function y = newt_diff_fr(Y,X,x,h) function y = f_newt_diff2(Y,h) - Y = ( Y(3) - 2 * Y(2) + Y(1) ) / h^2 + y = ( Y(3) - 2 * Y(2) + Y(1) ) / h^2 end function y = c_newt_diff2(Y,h) - Y = ( Y(3) - 2 * Y(2) + Y(1) ) / h^2 + y = ( Y(3) - (2 * Y(2)) + Y(1) ) / h^2 end @@ -57,18 +59,18 @@ end -function y = newt_diff_fr(Y,X,x,h) +function y = newt_diff_fr2(Y,X,x,h) idx = find(X==x); - if (idx == length(X)) - elems = [X(idx), X(idx-1), X(idx-2)] - y = b_newt_diff1(elems,h) + if (idx == length(X)) %forwards + elems = [Y(idx), Y(idx-1), Y(idx-2)] + y = b_newt_diff2(elems,h) - elseif (idx == 1) - elems = [X(idx), X(idx+1), X(idx+2)] - y = f_newt_diff1(elems,h) - else - elems = [X(idx-1), X(idx), X(idx+1)] - y = c_newt_diff1(elems,h) + elseif (idx == 1) %backwards + elems = [Y(idx), Y(idx+1), Y(idx+2)] + y = f_newt_diff2(elems,h) + else % centered + elems = [Y(idx-1), Y(idx), Y(idx+1)] + y = c_newt_diff2(elems,h) endif endfunction