Matlab - interpolacion hermite

 
Vista:
sin imagen de perfil

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 :

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
Val: 269
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

interpolacion hermite

Publicado por Daniel (264 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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

interpolacion hermite

Publicado por JOSE JEREMIAS CABALLERO (5917 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
[email protected]
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