Newton Forward difference method

6 Ansichten (letzte 30 Tage)
Sunday
Sunday am 15 Sep. 2024
Bearbeitet: Torsten am 15 Sep. 2024
% Confirmed case Sample data points (x, y)
data = [ 1, 88; 2, 49; 3, 47; 4, 8; 5, 34; 6, 762; 7, 98; 8, 40];
% Extract x and y values
x = data(:, 1);
y = data(:, 2);
n = length(x);
% Calculate forward differences
forward_diff = zeros(n, n);
forward_diff(:, 1) = y;
for j = 2:n
for i = 1:n-j+1
forward_diff(i, j) = forward_diff(i+1, j-1) - forward_diff(i, j-1);
end
end
% Construct the Newton Forward Difference polynomial
syms X;
P = y(1);
for j = 1:n-1
term = forward_diff(1, j);
for i = 1:j
term = term * (X - x(i));
end
P = P + term / factorial(j);
end
disp('Newton Forward Difference Polynomial:');
Newton Forward Difference Polynomial:
disp(simplify(P));
Result Newton Forward Difference Polynomial: - (725*X^7)/1008 + (1651*X^6)/80 - (173233*X^5)/720 + (70651*X^4)/48 - (91321*X^3)/18 + (146407*X^2)/15 - (1996741*X)/210 + 3658
The problem now is that when I substitute each value of x, I don't get the corresponding value of y as stated in the table. I need help on how to get the correct polynomial equation.

Akzeptierte Antwort

Torsten
Torsten am 15 Sep. 2024
Bearbeitet: Torsten am 15 Sep. 2024
Three coding errors:
% Confirmed case Sample data points (x, y)
data = [ 1, 88; 2, 49; 3, 47; 4, 8; 5, 34; 6, 762; 7, 98; 8, 40];
% Extract x and y values
x = data(:, 1);
y = data(:, 2);
n = length(x);
% Calculate forward differences
forward_diff = zeros(n, n);
forward_diff(:, 1) = y;
for j = 2:n
for i = 1:n-j+1
%forward_diff(i, j) = (forward_diff(i+1, j-1) - forward_diff(i, j-1))
forward_diff(i, j) = (forward_diff(i+1, j-1) - forward_diff(i, j-1)) / (x(i+j-1) - x(i));
end
end
% Construct the Newton Forward Difference polynomial
syms X;
P = y(1);
for j = 1:n-1
%term = forward_diff(1, j);
term = forward_diff(1, j+1);
for i = 1:j
term = term * (X - x(i));
end
%P = P + term / factorial(j);
P = P + term;
end
disp('Newton Forward Difference Polynomial:');
Newton Forward Difference Polynomial:
disp(simplify(P));
double(subs(P,X,x))
ans = 8×1
88 49 47 8 34 762 98 40
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
For all data series with deltax = 1 (as the one above), there is one error in your code. But note that this is a special case and the above code holds for arbitrary deltax.
% Confirmed case Sample data points (x, y)
data = [ 1, 88; 2, 49; 3, 47; 4, 8; 5, 34; 6, 762; 7, 98; 8, 40];
% Extract x and y values
x = data(:, 1);
y = data(:, 2);
n = length(x);
% Calculate forward differences
forward_diff = zeros(n, n);
forward_diff(:, 1) = y;
for j = 2:n
for i = 1:n-j+1
forward_diff(i, j) = forward_diff(i+1, j-1) - forward_diff(i, j-1);
end
end
% Construct the Newton Forward Difference polynomial
syms X;
P = y(1);
for j = 1:n-1
%term = forward_diff(1, j);
term = forward_diff(1, j+1);
for i = 1:j
term = term * (X - x(i));
end
P = P + term / factorial(j);
end
disp('Newton Forward Difference Polynomial:');
Newton Forward Difference Polynomial:
disp(simplify(P));
double(subs(P,X,x))
ans = 8×1
88 49 47 8 34 762 98 40
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

Weitere Antworten (0)

Kategorien

Mehr zu Polynomials finden Sie in Help Center und File Exchange

Produkte


Version

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by