%diferencias divididas con funcion
disp('-.Método de
diferencias divididias.-')
X=input('Introduzca
los valores de X [xo,x1,x2,...,x3]: ');
syms x
f=input('Introduzca la
funcion f(x): ');
pto=input('Introduzca el
punto a aproximar: ');
Y=subs(f,X);
n=length(X);
Q=zeros(n,n);
Q(:,1)=Y';
c=2;
k=1;
for j=2:1:n
for i=c:1:n
Q(i,j)=(Q(i,j-1)-Q(i-1,j-1))/(X(i)-X(i-k));
end
k=k+1;
c=c+1;
end
fprintf('\nLa matriz Q
es: \n')
disp(Q)
fprintf('\nEl
polinomio P es: \n')
syms x
c=1;
prod=1;
P=Q(1,1);
for N=2:1:n
for i=1:1:c
prod=prod*(x-X(i));
end
c=c+1;
P=P+prod*Q(N,N);
prod=1;
end
pretty(P)
valor_aprox=subs(P,pto);
valor_exacto=subs(f,pto);
resta=abs(valor_aprox-valor_exacto);
fprintf('\nEl valor
aproximado es: %9.9f',valor_aprox)
fprintf('\nEl valor
exacto es: %9.9f',valor_exacto)
fprintf('\nEl error
entre las cifras es: %e',resta)
fprintf('\n')
%METODO DE HERMIT DE
DIFERENCIAS DIVIDAS
%Pasar a fraccion, Hacer la
primera columna (Z)
fprintf('\n');
clear all
clc
fprintf('
-----------------------------------------\n')
fprintf(' MÉTODO DE HERMIT DE
DIFERENCIAS DIVIDIDAS\n')
fprintf('
-----------------------------------------\n')
fprintf('\n');
syms x
r=input('- Defina la
función : ');
xi=input('- Introduzca
los valores de x : ');
y=input('- Introduzca
los valores de y : ');
yderiv=input('- Introducir
los valores de la derivada : ');
k=input('- Introduzca
el valor a aproximar : ');
fprintf('\n' );
fprintf('\n' );
n=2*length(xi);
D=zeros(n,n);
b=1;
for a=1:2:n
z(a)=xi(b);
z(a+1)=xi(b);
y2(a)=y(b);
y2(a+1)=y(b);
b=b+1;
end
D(:,1)=y2';
x=0;
j=0;
cont=1;
while j<n-1
x=x+1;
j=j+1;
for i=x:n-1
if (z(i+1)-z(i+1-j))==0
D(i+1,j+1)=yderiv(cont);
cont=cont+1;
else
D(i+1,j+1)=(D(i+1,j)-D(i,j))/(z(i+1)-z(i+1-j));
end
end
end
D
s=1;
c=0;
q=0;
p=0;
for i=2:n
for j=i
s=1;
for m=1:1
q=q+1;
for h=1:(i-1)
s=s*(k-z(i-q));
q=q-1;
end
p=p+1;
q=q+p;
end
end
c=c+(D(i,j)*s);
end
for i=1:1
for j=i
c=c+(D(i,j));
end
end
fprintf('\n');
fprintf('- El
resultado es : %10.8f\n',c);
fprintf('\n');
d=subs (r,k);
fprintf('- La función
evaluada es : %10.8f\n',d);
fprintf('\n');
w=abs(d-c);
fprintf('- El
porcentaje de error es : %10.8f\n',w);
fprintf('\n');
%METODO DE DIFERENCIAS
DIVIDAS
fprintf('\n');
clear all
clc
fprintf('
-------------------------------\n')
fprintf(' MÉTODO DE
DIFERENCIAS DIVIDIDAS con funcion\n')
fprintf('
-------------------------------\n')
fprintf('\n');
syms x
r=input('- Defina la
función : ');
X=input('- Introduzca
los valores de x : ');
Y=input('- Introduzca
los valores de y : ');
z=input('- Introduzca
el valor a aproximar : ');
n=length(X);
D=zeros(n,n);
D(:,1)=Y';
for j=2:n
for k=j:n
D(k,j)=(D(k,j-1)-D(k-1,j-1))/(X(k)-X(k-j+1))
end
end
s=1;
c=0;
q=0;
p=0;
for k=2:n
for j=k
s=1;
for m=1:1
q=q+1;
for h=1:(k-1)
s=s*(z-X(k-q));
q=q-1;
end
p=p+1;
q=q+p;
end
end
c=c+(D(k,j)*s);
end
for k=1:1
for j=k
c=c+(D(k,j));
end
end
fprintf('\n');
fprintf('- El
resultado es : %10.8f\n',c);
fprintf('\n');
d=subs (r,z);
fprintf('- La función
evaluada es : %10.8f\n',d);
fprintf('\n');
w=abs(d-c);
fprintf('- El
porcentaje de error es : %10.8f\n',w);
fprintf('\n');
%método neville
disp('Metodo de
Neville')
disp('Recuerde que
no hay funcion, debe de ingresar los datos con la funcion ya evaluada')
po=input('Ingrese el
número a evaluar: ');
n=input('Ingrese el
número de datos: ');
%creo las variables en que
se almacenara los datos
x=zeros(1,n);
f=zeros(1,n);
Q=zeros(n-1,n-1);
%Pido los datos de entrada
for i=1:n
fprintf('Ingrese el valor de x%d: ',i-1);
x(i)=input('');
fprintf('Ingrese el valor de f(x%d): ',i-1);
f(i)=input('');
end
%comienzo a evaluar los
datos
%se crean los Q(x,y)
for l=1:n-1
for m=l:n-1
%El if
esta xq si l>1 ya no se usan los valores de F(xi) sino que se usan los
valores previamente obtenidos de Q
if l==1
%Calculo el valor de Q(x,y) y la
Ec. la coloco en pantalla
Q(m,l)=((po-x(m))*f(m+1)-(po-x(m+1))*f(m))/(x(m+1)-x(m));
fprintf('\nQ[%d,%d]=
(X-X(%d))Q[%d,%d]-(X-X(%d))Q[%d,%d])',m,l,m-1,m,l-1,m,m-1,l-1);
fprintf('\n-------------------------------------------- =
%.9f',Q(m,l));
fprintf('\n\t\t\tX(%d)-X(%d)\n',m,m-1);
else
%Calculo el valor de Q(x,y) y la
Ec. la coloco en pantalla
Q(m,l)=((po-x(m-l+1))*Q(m,l-1)-(po-x(m+1))*Q(m-1,l-1))/(x(m+1)-x(m-l+1));
fprintf('\nQ[%d,%d]= (X-X(%d))Q[%d,%d]-(X-X(%d))Q[%d,%d])',m,l,m-l,m,l-1,m-1,m-1,l-1);
fprintf('\n-------------------------------------------- =
%.9f',Q(m,l));
fprintf('\n\t\t\tX(%d)-X(%d)\n',m,m-l);
end
end
end
fprintf('\n\nEl valor
aproximado de x es: %.9f\n\n',Q(n-1,n-1));
fprintf('\n\nEl valor
aproximado de x es: %.9e\n\n',Q(n-1,n-1));
% metodo de lagrange
disp('Metodo de
Interpolacion y Polinomio de Lagrage - Sin usar funcion.');
syms x;
disp('RECUERDE
TODOS LOS DATOS DEBEN DE ESTAR EN LA MISMA ESCALA');
fprintf('P(x):f(x0)*L0(x)+f(x1)L1(x)....\n');
fprintf('L0(x)=(x-x1)(x-x2)(x-x3)/(x0-x1)(x0-x2)(x0-x3)....\n');
po=input('Ingrese el
número a evaluar: ');
n=input('Ingrese el
número de datos: ');
%creo las variables en que
se almacenara los datos
puntos=zeros(1,n);
valores=zeros(1,n);
EcLagrange=0;
%'La' representa el
numerador de cada polinimo L(x) y 'Lb' representa el denominador
La=1;
Lb=1;
L=zeros(1,n);
%Pido los datos de entrada
for i=1:n
fprintf('Ingrese el valor de x%d: ',i-1);
puntos(i)=input('');
fprintf('Ingrese el
valor de f(x%d): ',i-1);
valores(i)=input('');
end
for i=1:n
for j=1:n
if j~=i
%Generamos el numerador y
denominador del polinomio
La=La*(x-puntos(j));
Lb=Lb*(puntos(i)-puntos(j));
end
end
%imprimimos la formula en pantalla
fprintf('L%d(x)=\n',i-1);
pretty(La/Lb);
fprintf('\n--------------------------------------------------------------------------------\n\n');
%Evaluamos la funcion
funcion=La/Lb;
%creamos el polinomio de lagrange.
EcLagrange=EcLagrange+funcion*valores(i);
L(i)=subs(po,funcion);
La=1;
Lb=1;
end
fprintf('Polinomio de Lagrange:\n');
pretty(EcLagrange);
resultado=subs(EcLagrange,po);
fprintf('\n\nEl valor
del polinomio evaluado en %f es de: %.8f\n',po,resultado);