Matlab - interpolacion hermite

   
Vista:

interpolacion hermite

Publicado por daniel dnl928@hotmail.com (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 :

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Daniel

interpolacion hermite

Publicado por Daniel (212 intervenciones) el 24/02/2015 16:30:11
polisum no es una función nativa de matlab, se necesitaría ver que hace para chequear el código.

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

interpolacion hermite

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 24/02/2015 17:00:05
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
% 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
% fpx ---> valores de la derivada de la funcion en
% dichos puntos
% Px ---> polinomio de interpolacion resultante
function [Px]=hermnew(x,fx,fpx)
if  nargin <1
    x=[0  1];
    fx=[1 3];
    fpx=[1 -1];
end
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;
 
Px=poly2sym(Px,'x');
 
 
%Donde se ha definido la función polisum como
% Suma de polinomios
%
% [suma]=polisum(a,b);
function[suma]=polisum(a,b)
na=length(a);
nb=length(b);
suma=[zeros(1,nb-na) a]+[zeros(1,na-nb) b];




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[code>> Px=hermnew
 
x =
 
     0     1
 
 
fx =
 
     1     3
 
 
fpx =
 
     1    -1
 
 
Px =
 
- 4*x^3 + 5*x^2 + x + 1
[/code]



Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com
Estimado Usuario de Matlab, el correo es para servicios de cursos, asesoría y programación. Toda ayuda gratuita es vía foro.


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar