
interpolacion hermite
Publicado por daniel (4 intervenciones) el 23/02/2015 20:31:07
buen dia he intentado hacer el codigo para interpolar con el metodo de hermite me marca error pero no se porque me pueden ayudar? me marcaba error en unos lados despues me marco error en la linea 62 pero no se porque segun yo esta bien.
les dejo el codigo :
les dejo el codigo :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
% Metodo de interpolacion de Hermite con
% la expresion de Newton
%
% Uso: Px=hermnew(x,fx,fpx)
%
% x ---> puntos donde se conoce la funcion
% fx ---> valores de la funcion en dichos puntos
% fx ---> valores de la derivada de la funcion en
% dichos puntos
% Px ---> polinomio de interpolacion resultante
function [Px]=hermite(x,fx,fpx)
long=length(x);% Grado maximo del polinomio de interpolacion
dif=zeros(2*long);% Matriz de las diferencias divididas
colx=zeros(2*long,1);
% Creamos el vector con los puntos multiples
for k=1:2:2*long
colx(k)=x((k+1)/2);
end;
for k=2:2:2*long
colx(k)=x(k/2);
end;
% Introducimos los valores de la funcion
% por partida doble por cada punto
for k=1:2:2*long-1
dif(k,1)=fx((k+1)/2);
end;
for k=2:2:2*long
dif(k,1)=fx(k/2);
end;
% Montamos la columna de segundas diferencias divididas
for k=2:2*long
inicf=dif(k-1,1);
xin=colx(k-1);
xfi=colx(k);
if xin~=xfi
dif(k,2)=(dif(k,2-1)-inicf)/(xfi-xin);
else
dif(k,2)=fpx((k)/2);
end;
end;
% Iteracion
cont=3;
for col=cont:2*long
for row=cont:2*long
inicf=dif(row-1,col-1);
xin=colx(row-cont+1);
xfi=colx(row);
dif(row,col)=(dif(row,col-1)-inicf)/(xfi-xin);
end;
cont=cont+1;
end;
coef=diag(dif)';% la diagonal principal de la matriz
% son los coeficientes
% que hay que multiplicar.
Px=0;
for i=0:2*long-1
pol=1;
for k=1:i
pol=conv(pol,[1 -colx(k)]);
end;
if i<0
Px=polisum(Px,coef(1)*pol);
else
Px=polisum(Px,coef(i+1)*pol);
end;
end;
Valora esta pregunta


0