Maneras de interpolar función
Publicado por holyo (58 intervenciones) el 31/03/2010 11:11:51
Hola, tengo una matriz con dos columnas. Quiero obtener la función que me describa esos puntos, para ello utilizo el comando polyfit. Os pongo mi programita y os los explico.
La matriz la obtengo de un archivo de excel llamado Reynolds200000.xls
escojo format long para que no aproxime sólo con 4 decimales
X,Y son las columnas de la matriz
Defino un grado del polinomio con el que quiero interpolar
Me creo un vector de incognitas, es decir, que esté formado por x: Incog=[1 x x^2....]
Como he explicado en otro post, para obtener la función completa (incógnitas con coeficientes), multiplico la solución de polyfit por mi vectos de incógnitas.
Reynolds200000=xlsread('Reynolds200000.xls');
format long
syms x
display(Reynolds200000)
X=Reynolds200000(:,1);
Y=Reynolds200000(:,2);
grado_polinomio=10; %Grado del polinomio
Incog=[];
for i=grado_polinomio:-1:0
Incog=[Incog;[x^i]];
end
disp(Incog)
%Cl
disp('La función define a Cl es')
p=polyfit(X,Y,grado_polinomio)
plot(X,Y,'ro','LineWidth',2) % Plot data
hold on
xfit = 0:0.01:13;
yfit = polyval(p,xfit);
plot(xfit,yfit,'LineWidth',2) % Plot fit
ylim([0,1.5])
grid on
Cl1=p*Incog
ezplot(Cl1,[0,13])
Al utilizar una ecuación con 10 grados me sale este error:
Warning: Polynomial is badly conditioned. Add points with distinct X
values, reduce the degree of the polynomial, or try centering
and scaling as described in HELP POLYFIT.
Entiendo que quizás esté utilizando demasiados grados, pero es que si no lo hago la ecuación no se aproxima nada bien. El número de puntos que utilizo son 26.
¿Alguien sabe otra manera de interpolar?
Un saludo.
La matriz la obtengo de un archivo de excel llamado Reynolds200000.xls
escojo format long para que no aproxime sólo con 4 decimales
X,Y son las columnas de la matriz
Defino un grado del polinomio con el que quiero interpolar
Me creo un vector de incognitas, es decir, que esté formado por x: Incog=[1 x x^2....]
Como he explicado en otro post, para obtener la función completa (incógnitas con coeficientes), multiplico la solución de polyfit por mi vectos de incógnitas.
Reynolds200000=xlsread('Reynolds200000.xls');
format long
syms x
display(Reynolds200000)
X=Reynolds200000(:,1);
Y=Reynolds200000(:,2);
grado_polinomio=10; %Grado del polinomio
Incog=[];
for i=grado_polinomio:-1:0
Incog=[Incog;[x^i]];
end
disp(Incog)
%Cl
disp('La función define a Cl es')
p=polyfit(X,Y,grado_polinomio)
plot(X,Y,'ro','LineWidth',2) % Plot data
hold on
xfit = 0:0.01:13;
yfit = polyval(p,xfit);
plot(xfit,yfit,'LineWidth',2) % Plot fit
ylim([0,1.5])
grid on
Cl1=p*Incog
ezplot(Cl1,[0,13])
Al utilizar una ecuación con 10 grados me sale este error:
Warning: Polynomial is badly conditioned. Add points with distinct X
values, reduce the degree of the polynomial, or try centering
and scaling as described in HELP POLYFIT.
Entiendo que quizás esté utilizando demasiados grados, pero es que si no lo hago la ecuación no se aproxima nada bien. El número de puntos que utilizo son 26.
¿Alguien sabe otra manera de interpolar?
Un saludo.
Valora esta pregunta
0