Está en la página 1de 4

%Interpolacion de newton

clear;clc;
disp('metodos numericos');
disp('interpolacion');
disp('interpolacion');
n=input('ingrese el grado del polinomio, n=');
fprintf('Se necesitan %.0f puntos\n',n+1);
disp('ingrese los puntos');
for i=1:n+1
fprintf('x%.0f=',i-1);
X(i)=input(' ');
fprintf('y%.0f=',i-1);
Y(i)=input(' ');
end
DD=zeros(n+1);
DD(:,1)=Y;
for k=2:n+1
for J=k:n+1
DD(J,k)=[DD(J,k-1)-DD(J-1,k-1)]/[X(J)-X(J-k+1)];
end
end
disp('La matriz de diferencias divididas es:');
disp(DD);
disp('El polinomio de newton es');
syms x;
polnew=DD(1,1);
P=1;
for i=1:n
P=P*(x-X(i));
polnew=polnew+P*DD(i+1,i+1);
end
polnew=expand(polnew);
pretty(polnew);
x=input('ingrese el valor de x a interpolar,x=');
vi=eval(polnew);
fprintf('el valor interpolado es %.2f\n',vi);
hold on;
ezplot(polnew,[X(1) X(n+1)]);
plot(x,vi,'r+');

% INTERPOLACION "POLINOMIO DE LAGRAGE"

clc %permite borrar el area de trabajo

clear %permite borrar las variables almacenadas

format long %permite utilizar la maxima capacidad de la maquina

fprintf('INTERPOLACION "POLINIMIO DE LAGRAGE"\n\n\n');

%fprintf me permite ingresar comentarios de manera textual que pueden

%orientar al usuario en el uso del programa

xi=input('Ingrese los puntos pertenecientes a las x: ');


yi=input('Ingrese los puntos pertenecientes a las y: ');

%input es un comando de solicitud de entrada de datos del usuario.

n=length(xi);

x=sym('x'); %esta funcion nos permite dejar la variable 'x' como


simbólica

% y asi poder trabajar con ella, sin tener que asignarle un valor.

for j=1:n

producto=1;

for i=1:j-1

producto=producto*(x-xi(i)); %calculo del producto 1 superior de L

end

producto2=1;

for i=j+1:n

producto2=producto2*(x-xi(i)); %calculo del producto 2 superior de L

end

producto3=1;

for i=1:j-1

producto3=producto3*(xi(j)-xi(i)); %calculo del producto 3 inferior de L

end

producto4=1;

for i=j+1:n

producto4=producto4*(xi(j)-xi(i)); %calculo del producto 4 inferior de L

end

L(j)=(producto*producto2)/(producto3*producto4); %cálculos de las L para

fprintf('\n L%d:\n',j-1) %poder hallar el polinomio

disp(L(j)) %la función dispo nos permite visualizar variables o texto


% en el workspace

end

pn=0;

for j=1:n

pn=pn+L(j)*yi(j); %calculo del polinomio interpolante

end

fprintf('\n POLINOMIO INTERPOLANTE: \n')

%disp(pn) % esta ejecucion la podemos utilizar cuando no necesitamos

%simplicar la expresion

pn = simplify(pn); %este comando nos permite simplificar toda la


expresion

disp(pn)
opc=input('\nDesea aproximar un valor (si/no): ','s');

%este comando nos permite saber si el usuario quiere obtener una

%aproximacion de un punto dado, en el polinomio que se acaba de obtener

if opc=='si'

x=input('\nIngrese el punto a aproximar: ');

y=eval(pn); %evaluar el punto en el polinomio

disp('\nLa aproximacion a f(x) es:')

disp(y)

end
function[solucion,num_iteraciones]=metodo_jacobi(A,B,punto_inicial,error)
cont_iteraciones=0;
s=size(A);
num_ecuaciones=s(1);
for k=1:num_ecuaciones
B(k)=B(k)/A(k,k);
A(k,:)=A(k,:)/A(k,k);
A(k,k)=0;
end
M=-A;
x_ant=punto_inicial';
x_sig=M*x_ant+B;
deltax_n=x_sig-x_ant;
while norm(deltax_n,inf) > error
x_sig=M*x_ant+B;
deltax_n=x_sig-x_ant;
x_ant=x_sig;
cont_iteraciones=cont_iteraciones+1;
end
solucion=x_sig;
num_iteraciones=cont_iteraciones;
end

También podría gustarte