CODIGO:
% ingreso de datos.
x=[-1 0 1 2 3];y=[3 0 -1 1 2];
xa=x;ya=y;
%se le dan los valores de xa e ya a las variables x e y que serán utilizadas mas adelante.
% Formacion de las diferencias divididas a través de ciclos “for” e “if”.
d=zeros(length(y));
%zeros(n) genera una matriz de nxn con todos sus valores iguales a cero, en este caso utiliza el largo del arreglo y
d(:,1)=y';
%Se asigna valor de y’ a la columna de la matriz creada anteriormente
for k=2:length(x)
%se hacen dos ciclos, uno dentro de otro, donde van variando los valores de j y k, y va entregando cuales son los valores que se utilizaran en
for j=1:length(x)+1-k
d(j,k)=(d(j+1,k-1)-d(j,k-1))/(x(j+k-1)-x(j));
end
end
for w=1:length(x)
ds=num2str(abs(d(1,w)));
%los valores numericos de la matriz “ds” en las coordenadas (1,w) se transforman en “string”, cuyos valores no serán modificados después, y serán mostrados al final en “presentación de resultados”
if w>1
%si w es mayor que 1…
if x(w-1)<0
%si la multiplicación de x por (w-1)es menor a cero, se agrega un símbolo “+” al polinomio de resultado.
sg1='+';
else
%en caso contrario, el símbolo matemático es “-“.
sg1='-';
end
end
if d(1,w)<0
sg2='-';
else
sg2='+';
end
if w==1
acum=num2str(d(1,1));
%se crea un contador de nombre “acum” que irá almacenando el polinomio obtenido, y lo mostrará el final del codigo
elseif w==2
polinact=['(x' sg1 num2str(abs(x(w-1))) ')' ];
actual=[ds '*' polinact];
acum=[acum sg2 actual];
else
polinact=[polinact '.*' '(x' sg1 num2str(abs(x(w-1))) ')' ];
actual=[ds '*' polinact];
acum=[acum sg2 actual];
end
end
% Presentacion de resultados
fprintf('los valores de X e Y son');
disp(xa);
disp(ya);
%imprimir en pantalla el polinomio obtenido
fprintf('El polinomio interpolación Newton obtenido es: %s ',acum);
exelente
ResponderEliminarmuy bueno el codigo
ResponderEliminarno grafica?
ResponderEliminargracias
ResponderEliminarglasias vuelva plonto
ResponderEliminar