Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2021
TALLER MÉTODOS NUMÉRICOS 2
Tabla de contenido
Interpolación de Splines..................................................................................................................3
Interpolación de Newton..................................................................................................................5
Interpolación de Lagrange...............................................................................................................7
3
Interpolación de Splines
function [a,b,c,d]=splinecubico(w,y,z)
n=length(w);
%Donde se almacenan los coeficientes // Se van a guardar los
coeficientes que vamos a usar en nuestro script
clear A B C D;
for i=l:n-1
%aquí se calculan los H y las X de cada intervalo
h(i)=(i+1)-w(i);
end
s(1)=0;
s(n)=0;
B (1) =2*(h(1)+h(2));
C (1) =h(2);
D (1) =6*((y(3)-y(2))/h(2)-(y(2)-y(1))/h (1))-h(1)*s(1);
for i=2:n-3
% Sistema tridiagonal acá donde se puede sacar el valor de S y seguir
con el proceso del script
A(i)=h(1);
B(i)=2*(h(i)+h(i+1));
C(i)=h(i+1);
D(i)=6*((y(i+1))/h(i+1)-(y(i+1)-y(i))/h(i));
end
A(n-2)=h(n-2);
B(n-2)=2*(h(n-2)+h(n-1));
D(n-2) =6*((y(n)-y(n-1))/h(n-1)-(y(n-1)-y(n-2))/h(n-2))-h(n-1)*s(n);
u=TridiagonalCX (A, B,C,D);
for i=2:n-1
s(i)=u(i-1);
end
for i=1:n-1
% El Porcentaje de Coeficientes del Spline Cubico
a(i)=(s(i+1)-s(i))/(6*h(i));
b(i)=s(i)/2;
c(i)=(y(i+1)-y(i))/h(i)-(2*h(i)*s(i)+h(i)*s(i+1))/6;
d(i)=y(i);
4
end
if nargin==3;
#puntos del Spline Cubico/ interpolación con los coeficientes
p=[ ];
m=lenght(z);
for k=1:m
t=z(k);
for i=1:n-1
if t>=w(i)&t<=w(i+1)
p(k)=a(i)(t-w(i))^3+b(i)(t-w(i))^2+c(i)*t-w(i))+d(1);
endif
endfor
end
if m>1
k=m;
i=n-1;
p(k)=a(i)(t-w(i))^3+b(i)(t-w(i))^2+c(i)*t-w(i))+d(1);
endif
clear a b c d;
a=p;
end
Imagen en octave
Interpolación de Newton
%Interpolación de Newton%
clear;clc;
disp ('Clase de métodos numéricos');
disp ('interpolación de Newton');
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');
pkg load symbolic;
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);
6
Al inicio de nuestro script le pedimos que ingrese el grado del polinomio, después
según el dato ingresado por el usuario se ingresan los valores (x, y), se usa el for
para crear el polinomio de newton, con el input se va a leer el dato después de x,
por se abre una ventaja con la gráfica, la gráfica, varía dependiendo de los datos
que el usuario digito.
Foto en octave
7
Interpolación de Lagrange
clc
%disp (‘clase de métodos numéricos’);
%disp (‘Interpolación de Lagrange práctica ‘);
for i=[1:n]
l(i)=1;
for j=[1:n]
if j!=i
l(i)=l(i)*(x-vx(j))/(vx(i)-vx(j));
8
end
end
fprintf('L%i = %.6g\n' , i-1, l(i))
end
fn=dot(l,fx);
fprintf ('\n La interpolación de Lagrange es: %.6g\n ', fn)
Foto en octave