viernes, 25 de noviembre de 2011

“Diferencias divididas de Newton en Matlab”

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);

5 comentarios: