Lagrange Interpolation Code Error/Help

7 visualizaciones (últimos 30 días)
Manny
Manny el 9 de Mzo. de 2021
Comentada: Manny el 9 de Mzo. de 2021
Hello! I am to graph an interpolating polynomial and the data points. The data points are from a file which I will provide. I keep running into an error which is "Array indices must be positive integers or logical values." for my variable ys. I would love to use polyval however I am not allowed in this assignment. Any idea how to fix this or what I need to change?? I know that p is not the right thing to do...Thanks in advance!
data file (first line are the x values, second line is the y values, and third line is N which will be the number of points to use to graph the polynomial which is found in xs)
1 2 3 4 5 6 7
1 4 9 16 25 36 49
101
code:
clear;
clf;
%reading from dot_data file
fid = fopen('data_file.m','r');
x = str2num(fgetl(fid)); %reads in first line of data
n = length(x); %length of x
tline = fgets(fid); %reads in the second line of data
y = str2num(tline); %converts to numbers
tline = fgets(fid, 3); %reads in last line of data
N = str2num(tline); %N, also converts to number
fclose(fid); %close file
xx = [x];
yy = [y];
deg = n - 1;
%lagrange
sum=0;
for i=1:length(x)
p=1;
for j=1:length(x)
if j~=i
c = poly(x(j))/(x(i)-x(j));
p = conv(p,c);
end
end
term = p*y(i);
sum= sum + term;
end
%max x value
x_n = max(x);
%plotting the polynomial and data points
xs = linspace(x(1), x_n, N);
ys = p(xs); %this is where I have a mistake when using p
plot(xx,ys, 'r'); %plotting the curve/line
hold on;
plot(x, y, '-o');%plotting the points

Respuesta aceptada

KSSV
KSSV el 9 de Mzo. de 2021
You can evaluate polyval using:
deg = length(p)-1 ; % degree of he polynomial
% get powers of x till deg
X = xs'.^(deg:-1:0) ;
y = sum(p.*X,2) ; % assuming p has coefficients are in decresing powers of n
  9 comentarios
Walter Roberson
Walter Roberson el 9 de Mzo. de 2021
Using sum as a variable name leads to problems more often than not, as it is very common to want to use sum as a function in the same section of code. We advise to never use sum as the name of a variable.
Manny
Manny el 9 de Mzo. de 2021
That makes so much sense! I didn't realize sum was already a variable name so now understand why there were so many issues.
Now the only issue left that I can see is that my data points are being plotted on a straight line and not on the curve. I notice the x axis with 10^4 on the top.
I apologize for asking so many questions and I appreciate all of the help!!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Data Converters en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by