Please let me know in case the question is not clear or is not well-posed and if further clarifications are needed
Cubic interpolation coefficients and basis matrix
12 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Alessandro Maria Marco
le 29 Jan 2024
Commenté : Alessandro Maria Marco
le 6 Fév 2024
Suppose I have n data points (x(i),y(i)) with i=1,..,n. I want to compute a cubic interpolant that fits exactly these points (interpolation, not least squares fit). I can do the following in Matlab:
x_min = -1;
x_max = 1;
nx = 10;
x = linspace(x_min,x_max,nx)';
y = exp(-x);
pp = csapi(x,y); %Can also use spline
disp(pp)
This returns the coefficients in the matrix pp.coefs: each row l (for l=1,..,n-1) of this matrix gives the 4 coefficients of the cubic polynomial for the specific subinterval l. However, I would like the cubic in another form. A cubic spline can be written as
(1)
where phi_j(x) are the basis functions and c is a vector of n+2 coefficients. How can I get these n+2 coefficients (and, optionally the basis matrix Phi)? The Matlab functions csapi and spline give this (n-1)*4 matrix of coefficients which is not what I want.
Reference: The source for (1) is Fehr and Kindermann, "Computational Economics", Oxford University Press, page 93.
Any help is greatly appreciated, thanks!
5 commentaires
Torsten
le 30 Jan 2024
Modifié(e) : Torsten
le 30 Jan 2024
Then you will have to sum the B_(j,3) functions that have non-zero support in [t_i,t_i+1] and equate this sum to the usual cubic spline representation coming from "csape" in [t_i,t_i+1]. Comparison of coefficients of the two cubic polynomials in all subintervals should give you a linear system of equations to determine the alpha_i coeffcients from the "csape" coefficients.
Réponse acceptée
Matt J
le 30 Jan 2024
Modifié(e) : Matt J
le 30 Jan 2024
Using this FEX downloadable,
x_min = -1;
x_max = 1;
nx = 10;
x = linspace(x_min,x_max,nx)';
xx=linspace(x(1),x(end),1000)';
fun=@(in)csapi(x,in,xx);
Basis=func2mat(fun,x); %Columns of this matrix are basis functions
y=exp(-x);
yy=exp(-xx);
c=Basis\yy; %Coefficients
subplot(1,2,1)
h=plot(x,y,'o',xx,Basis*c,'.r'); axis square
title({'Interp by Basis'; 'Matrix Multiplication'})
subplot(1,2,2)
plot(Basis); axis square
title 'Basis functions'
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Spline Postprocessing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


