Spline: Es una determinada curva diferenciable definida en una cantidad de porciones mediante
polinomios. Se usa a menudo en la interpolación porque da lugar a resultados precisos requiriendo
solamente del uso de polinomios de bajo grado evitando así las pequeñas distorsiones u
oscilaciones que se pueden presentar.
Para poder integrar con Spline necesitamos hallar el polinomio de interpolación. Supóngase que se
va a interpolar cierta función f(ti) definida por un conjunto finito de valores yi por medio de unas
serie de polinomios pi(t).Cabe decir que los datos t0,t1,…,ti-1,ti ,ti+1,…,tn-1,tn; no tienen que estar
necesariamente igualmente espaciados , pero deben cumplir con la condición:
De modo que el objetivo es encontrar los polinomios pi (t) que interpole la función yi= f(ti) en un
intervalo [ti, ti+1], con i=1,2,3,…,n-1.
Las dos tipos de interpolación con Spline que utilizaremos son la lineal y cubica. La lineal se rige
bajo la fórmula:
La cubica se rige a partir de todas las condiciones nombradas anteriormente y bajo la fórmula:
en la cual:
2. Estos dos botones me permitirán calcular la integral con los datos y poder modificar la entrada
de valores sin necesidad de tener que volver al inicio de la interfaz
4. En estos cuadros se podrá los dos resultados de la integral con Spline, una con interpolación
lineal y la otra con interpolación cubica
5. Con estos dos botones podemos devolvernos a la ventana de la interfaz principal y salirnos por
completo del programa
Ejemplo:
Código de la interfaz:
integracion_spline.m
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Outputs from this function are returned to the command line.
function varargout = integracion_spline_OutputFcn(hObject, eventdata,
handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
for i=1:size(x)
if isnan(x(i)) || isnan(y(i))
set(handles.mensajes,'string','Error: datos en la tabla son
invalidos');
set(handles.integracion_lineal,'string','NaN');
set(handles.integracion_cubica,'string','NaN');
return;
end
end
[I_cubica, I_lineal, mensaje]=inter_spline(x,y);
set(handles.mensajes,'string',mensaje);
set(handles.integracion_lineal,'string',I_lineal);
set(handles.integracion_cubica,'string',I_cubica);
inter_spline.m
mensaje='Solucionado';
I_cubica=NaN; %Inizializar valores en caso de error
I_lineal=NaN;
%x=[-2 -1 0 1 2 3];
%y=[1 4 11 16 13 -4];
try
pp=spline(x,y);
I_cubica=integral(@(x) ppval(pp,x),min(x),max(x)); %integral con
interpolacion cubica
I_lineal=trapz(x,y); %integral con interpolacion lineal
catch
mensaje='Error: los datos no se pueden integrar';
return;
end
try
plot(x,y,'x','markersize',6,'markerfacecolor','g','DisplayName','Datos de
entrada'); %gráfica los datos
grid on
hold on